关于 Java正则表达式中的Possessive数量修饰词的理解
来源:互联网 发布:女孩名字网络 编辑:程序博客网 时间:2024/05/20 01:11
正则表达式对于数量限定符如 ?, + , *, {n, m} 的匹配默认是贪婪模式,比如:
a.*b 匹配 acbab 的结果是 acbab 而不是acb
正则表达式支持懒惰模式,也就是在数量限定符后加一个数量修饰词(quantifier),用问号表示, 比如:
a.*?b 匹配 acbab 的结果是 acb 而不是acbab
而Java语言在正则表达式中支持一种Possessive 数量修饰词 ,用加号表示。其字面意思是像贪婪模式一样匹配,但不回溯。这到底是什么意思呢?其实这和匹配算法相关,比如:
在贪婪模式下,正则表达式 a.*b 在匹配 acbac时,在匹配成功第一个字符a后,匹配算法会继续往后读取字符a之后的字符来匹配.* , 这时贪婪模式就起作用了,a后面的cbac都能匹配.*,但当匹配算法继续往后读取字符时,发现已经没有字符可读了,无法匹配正则表达式中的b了,于是就回溯一个字符,看c是否能匹配b,不能,继续回溯,直到回溯到b时,才匹配到了acb。 而a.*+b在匹配时是不会回溯的,也就是说当贪婪地读到最后一个字符时发现无有字符与b匹配了,就认为匹配失败了。
再举几个例子
(ab)*+a 匹配 ababacd 时 可以匹配到 ababa , 因为两个ab之后没有ab了,无法贪婪
a?+a 匹配aaaaa 时会匹配到 aa ,但 a++a和a{0, 10}+a却会匹配失败
- 关于 Java正则表达式中的Possessive数量修饰词的理解
- Java数量修饰词的理解
- java 正则表达式Greedy、Reluctant、Possessive的理解
- Java中的正则表达式中Greedy,Reluctant和Possessive数量词的区别
- Java正则中的Greedy、Reluctant 、Possessive
- Java正则中的Greedy、Reluctant 、Possessive qualifier
- java基础巩固系列(十三):java正则表达式中的数量词:Greedy、Reluctant、Possessive
- 【转载】JAVA正则表达式的三种模式的区别-greedy reluctant possessive
- 一篇关于Java正则表达式的理解
- 总算是明白 java正则表达式 中 Greedy 、Reluctant 、Possessive数量词的区别了
- Greedy Reluctant Possessive 正则表达式
- [转载]正则表达式 的greedy、reluctant和possessive量词
- 正则表达式Greedy、Reluctant、Possessive三种策略的区别
- 正则表达式中Greedy、Reluctant、Possessive数量词的区别
- 关于正则表达式中的(?=re)的理解和例子
- Java正则表达中Greedy Reluctant Possessive 的区别
- Java正则表达中Greedy Reluctant Possessive 的区别
- java 修饰词 private final 简单的理解
- 黑马程序员_Java面向对象——继承
- Hive调研
- 启程
- 批处理获取U盘、可移动硬盘的盘符
- 跟着老毕学Java之网络编程
- 关于 Java正则表达式中的Possessive数量修饰词的理解
- Android恢复出厂设置,时间和日期未恢复
- HTTP请求和响应
- 第一辑 回家的路--做事情和做事业
- ibatis错误:java.lang.NoClassDefFoundError
- 感谢你们
- erikreed
- sencha touch 访问自定义字段
- 贴吧推广小技巧