Java正则中的Greedy、Reluctant 、Possessive
2013-04-17 13:42
393 查看
我们平时经常使用的正则表达式默认情况下基本都是Greedy模式,也就是贪吃模式,java中看下表
也就是说对于 abcd123这个原始文本来说 .*3 是可以匹配的,因为点可以匹配任何字符,*表示可以匹配0次或者多次,全部吃入abcd123发现.*匹配了,但是后面有个3却无法匹配,因此就回溯一个字符,也就是.*只匹配abcd12 刚好整个表达式可以匹配。这就是贪吃,可以回溯。
与Greedy相类似的还有一个Possessive
它和greedy类似,也是全部吃入,但是唯一不同的是它不回溯,所以对于上面的abcd123这个例子,.*+3是不匹配的。
对于Reluctant 来说,就是Greedy的一个相反的匹配模式,他从左到有一个一个开始匹配,而不是整个字符串一个一个回溯。
同样对于上面这个例子,abcd123, 用.*?3 也是匹配的,因为从左到右,一个一个看只有全部才能匹配,而对于 模式.+?来说,只匹配最左边的a字符,如果.*?意味着没有匹配任何字符。
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
与Greedy相类似的还有一个Possessive
Possessive 数量词 | |
---|---|
X?+ | X,一次或一次也没有 |
X*+ | X,零次或多次 |
X++ | X,一次或多次 |
X{n}+ | X,恰好 n 次 |
X{n,}+ | X,至少 n 次 |
X{n,m}+ | X,至少 n 次,但是不超过 m 次 |
对于Reluctant 来说,就是Greedy的一个相反的匹配模式,他从左到有一个一个开始匹配,而不是整个字符串一个一个回溯。
Reluctant 数量词 | |
---|---|
X?? | X,一次或一次也没有 |
X*? | X,零次或多次 |
X+? | X,一次或多次 |
X{n}? | X,恰好 n 次 |
X{n,}? | X,至少 n 次 |
X{n,m}? | X,至少 n 次,但是不超过 m 次 |
相关文章推荐
- java正则表达式——Greedy、Reluctant和Possessive
- Java正则表达中Greedy Reluctant Possessive 的区别
- java基础巩固系列(十三):java正则表达式中的数量词:Greedy、Reluctant、Possessive
- Java中的正则表达式中Greedy,Reluctant和Possessive数量词的区别
- java 正则表达式Greedy、Reluctant、Possessive的理解
- 总算是明白 java正则表达式 中 Greedy 、Reluctant 、Possessive数量词的区别了
- 【转载】JAVA正则表达式的三种模式的区别-greedy reluctant possessive
- 正则表达式Greedy、Reluctant、Possessive三种策略的区别
- 正则表达式:Greedy、Reluctant、Possessive 区别
- Java正则中的Greedy、Reluctant 、Possessive qualifier
- 正则表达式中Greedy、Reluctant、Possessive数量词的区别
- Java:正则匹配的不同情况(贪婪,勉强): greedy, reluctant, possesive
- Differences Among Greedy, Reluctant, and Possessive Quantifiers
- Greedy vs. Reluctant vs. Possessive Quantifiers
- greedy、reluctant和possessive量词的区别
- 【Java正则表达式中的Possessive数量修饰词的理解】
- Greedy vs. Reluctant vs. Possessive Quantifiers
- 【Java正则表达式中的Possessive数量修饰词的理解】
- 【Java正则表达式中的Possessive数量修饰词的理解】
- 【Java正则表达式中的Possessive数量修饰词的理解】