Java正则表达式总结

依赖包:

java.util.regex,其主要包含三个类 Matcher、Pattern和非强制性异常PatternSyntaxException。

在Java中,\代表转义字符,常见的如\n表示换行,\t表示制表符。想要单独表示反斜线则用\\。双反斜线表示一个反斜线,前一个表示转义,后一个表示要表示的字符。

在正则表达式中,需要\\\\表示一个反斜线。前两个代表一个反斜线,后两个也代表一个反斜线。正则表达式中反斜线同样需要转义,前两个是为后面两个转义用的,所以需要四个反斜线。同理,\\d中的第一个反斜线表示转义,而后面的\d表示任意一个数字。


样例解析:

(Java正则表达式匹配IP地址)

//匹配IP地址 [0-255].[0-255].[0-255].[0-255]
String pattern = "^((2[0-4]\\d|25[0-5]|[0-1]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[0-1]?\\d\\d?)$";
Pattern compile = Pattern.compile(pattern);
Matcher matcher = compile.matcher(ip);
System.out.println(matcher.matches()); //全匹配,返回true或false
//System.out.println(matcher.lookingAt()); //包含匹配,匹配的字符串必须在整串的最前面
//System.out.println(matcher.find()); //包含匹配,匹配的字符串可以在任何位置

pattern表示的含义是:

2[0-4]\\d   【2[0到4]任意数字】《200-249》 |

25[0-5]   【25[0到5]】《250-255》|

[0-1]?\\d\\d?   【0到1】(可无)任意数字任意数字(可无)《0-199》

\\. 转义表示.

{3}表示重复3次,x.x.x.

最后一位和上述相同


正则表达式常用基础:

\d 表示任意一个数字

\w 表示任意一个数字字母或下划线 0-9 a-z A-Z _

\s 表示任意空白字符,包括空格、制表符、换页符

对应的大写字母具有相反意义

. 表示匹配除了换行符\n以外的任意字符

使用方括号[]包含一系列字符,能够匹配其中任意一个字符。如[ab#]表示匹配a或b或#。

使用^表示匹配除了其中字符外的任意字符,如[^a-f0-3]表示匹配除了a-f和0-3之外的任一字符

使用{}放在表达式后面表示匹配次数,如a{3}表示aaa,

{m,n}表示最少匹配m次,最多匹配n次。{m,}表示最少匹配m次,没有次数上限。

?表示匹配0次或1次,相当于{0,1}

+表示最少匹配1次,相当于{1,}

*表示匹配0次或任意次,相当于{0,}

^ 与字符串开始的地方进行匹配 ,例子 ^aaa 匹配 xaaaxxx不成功 ,匹配aaaxxxx成功
$ 与字符串结束的地方进行匹配 ,例子 aaa$ 匹配 xaaaxx不成功,匹配xxxaaa成功
\b 匹配单词边界,不匹配任何字符,例子 "\\bend\\b",表示匹配end这个单词单独出现,而非end嵌入在某个单词中

| 表示左右两边表达式之间获的关系,匹配左边或右边

正则表达式贪婪匹配和非贪婪匹配
使用 + 和 * 会尽可能多的匹配内容,即贪婪模式
使用 ? 会尽可能少的匹配内容,即非贪婪模式


进阶-反向引用 

        表达式匹配字符串可以使用前面已经匹配到的字符,\\1代表第一对括号内匹配到的字符串,同理\\2代表第二对括号内匹配到的字符串。

        例子: String pattern="('|\")(.*?)(\\1)",表示匹配' '或者" "之间的内容

        String pattern3 = "('|\")(.*)(\\1)";
        String x = "'hello',\"world\"";
        Pattern compile = Pattern.compile(pattern3);
        Matcher matcher = compile.matcher(x);
        while(matcher.find()){
            System.out.println(matcher.group());
        }

        输出结果是'hello' "World"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值