不是 group by 表达式_Java 正则表达式用法总结二

Quantifiers 量词

指定匹配出现的次数。注:1)() 一组字符,并且关系;2){} 量词,出现次数;3)[]一组字符,或关系

X?不匹配或一次匹配;

X+一次匹配或多次匹配;

X* 不匹配或多次匹配;

X{n}匹配n次

X{n,}匹配至少n次,无上限

X{n,m}匹配至少n次,但不超过m次

例如:

表达式:a?字符串:(空串)find返回true

表达式:(foo)+字符串:foofind返回true

表达式:(foo)*字符串:(空串)find返回true

表达式:a{3,} 字符串:bbaaaaccc find返回true,group是aaaa

表达式:a{3,4}字符串:bbaaaaacccfind返回true,group是aaaa;因为匹配次数需要满足至少3次,但不超过4次,所以匹配aaaa。

Greedy、Reluctant、Possessive量词的区别

Greedy 顾名思义贪婪,一次读入所有字符尝试第一次匹配。如果第一次匹配失败,则退后一个字符继续匹配,直到匹配成功,或者没有可以继续退后的字符停止。不加任何额外量词,以上例子默认就是Greedy量词。

Reluctant 和Greedy正相反。从开始一次读入一个字符进行匹配,直到最后匹配所有字符。后面加?量词修饰。

Possessive 和Greedy一样一次读入所有字符尝试匹配,但区别是只匹配一次,也是唯一的一次。不会像Greedy一样退后字符进行尝试匹配。后面加+量词修饰。

例如:

字符串:xfooxxxxxxfoo

1、表达式:.*foo(Greedy)find返回true,group是xfooxxxxxxfoo。

全部读入字符串;先匹配.*,全部匹配成功;接着匹配foo,逐字符退后读入字符匹配。

2、表达式:.*?foo(Reluctant)

find第一次返回true,group是xfoo;

find第二次返回true,group是xxxxxxfoo。

逐字符读入匹配正则表达式。

3、表达式:.*+foo(Possessive)find返回false

全部读入字符串;先匹配.*,全部匹配成功;接着匹配foo,因为所有字符已经匹配并且没有退后匹配机制,所以匹配不成功

Capturing Groups

  • Capturing Groups就是把多个字符作为一个单元,把多个字符放在一对()内。

例如:

表达式:hi(hello)+(df)* 字符串:hihellohellodf

Capturing Groups的数量就是判断表达式一共有多少对()。其中组序号是从左向右进行划分,即:第1组(hello),第2组(df)。还有一个特殊的第0组,就是表达式本身hi(hello)+(df)*。

Matcher.groupCount()返回Capturing Groups的数量(不包括第0组)。因此上述例子的返回值是2。

Matcher.group(group)返回匹配成功的第group组字符串。

Matcher.group(0)同Matcher.group()返回hihellohellodf;

Matcher.group(1)返回hello;

Matcher.group(2)返回df;

注意:若匹配成功,某一组没有子序列的话,返回null。

  • BackreferencesN后跟组号N,就是重复匹配第N组子序列。

例如:

表达式:(dd)1

1、字符串:1212find返回true,group是1212。

(dd)表示匹配子序列12,1重复匹配第一组子序列12。

2、字符串:1234find返回false。

(dd)表示匹配子序列12,1重复匹配第一组子序列12,后面的两个数字是34,所以不匹配。

Boundary Matchers 边界匹配

^ 起始限制,必须在行首

$ 结尾限制,必须在行尾

例如:

表达式:^88.* 字符串:88afind返回true。88在行首,后面是0到多个字符。

表达式:s*dog$ 字符串: dog(前面3个空字符)find返回true。dog在行尾,前面是0到多个whitespace字符。

b 限制word边界

B 不限制word边界

例如:

表达式:bdogb字符串:hello dogfind返回true,group是dog。查找dog,前后边界约束,不得有whitespace意外的字符。

表达式:Bdogb字符串:hellodog ccfind返回true,group是dog。查找dog,前边界不约束,因为有B,后边界约束。

A相当于^

Z 相当于$,最后的终止符(如:)不在匹配之列

z匹配最后的所有字符

例如:

表达式:Adog字符串:dog hellofind返回true。

表达式:dogZ字符串:abc dog find返回true。以dog结尾(不匹配终止符)。

表达式:dogz字符串:abc dog find返回false。字符串是以结尾,最后不是以dog结尾,所以不匹配。

G紧接着上一次匹配的后面进行匹配,直到不匹配为止。

例如:

表达式:Gdog字符串:dogdog dog

find第一次返回true,group是dog,start是0,end是3;

find第二次返回true,group是dog,start是3,end是6。

首先匹配第一个dog,然后紧接着上一次匹配的后面匹配第二个dog;第二个dog后面是空格,所以匹配结束,即使空格后面还有一个dog。使用场景:匹配多个相同子序列之间无其他字符干扰。

f25f7e049522c93928ede1b261eef4dc.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值