Java 正则表达式使用心得

Greedy数量词和Reluctant数量词的区别。

Greedy:贪婪。

Reluctant:懒惰。Greedy数量词

X?X,一次或一次也没有

X*X,零次或多次

X+X,一次或多次

X{n}X,恰好n次

X{n,}X,至少n次

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

Reluctant数量词

X??X,一次或一次也没有

X*?X,零次或多次

X+?X,一次或多次

X{n}?X,恰好n次

X{n,}?X,至少n次

X{n,m}?X,至少n次,但是不超过m次

举例说明。

给定字符串:abjdabkd。需求:想找到以ab开头,d结尾的字符串。

如果使用Greedy数量词,得到的结果是abjdabkd,整个字符串;如果使用Reluctant数量词,得到的结果是abjd和abkd。

为什么呢?

因为贪婪匹配就是根据起始字符,从满足起始字符开始,把之后的整个字符串全部读入,然后从结尾处一个一个字符递减匹配,直到找到满足条件的字符串,以此可以看出,对于Matcher的find方法,这样使用即可:if(m.find()),因为只可能匹配一次。

而懒惰匹配就是根据起始字符,从满足起始字符开始,一个一个读入字符,直到第一次满足条件,如果想找到给定字符串中所有满足条件的字符串,对于Matcher的find方法,这样使用即可:while(m.find()),因为可以匹配多次。

相关推荐