正则表达式的贪婪式,懒惰式,占有式
来源:互联网 发布:centos xorg 安装 编辑:程序博客网 时间:2024/06/12 01:26
转载:http://blog.csdn.net/luoweifu/article/details/42759439
探讨Java正则表达中Greedy、Reluctant、Possessive三种策略的区别。
从Java的官方文档http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中我们可以看到,正则表达式表示数量词的符号有三套,分别是Greedy(贪婪的)、Reluctant(勉强的)和Possessive(独占的)。其含意如下:
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 次
Possessive 数量词
X?+
X,一次或一次也没有
X*+
X,零次或多次
X++
X,一次或多次
X{n}+
X,恰好 n 次
X{n,}+
X,至少 n 次
X{n,m}+
X,至少 n 次,但是不超过 m 次
Greedy、Reluctant、Possessive的区别
实例说话
看上面的表格我们发现这三种数量词的含意都相同(如X?、X??、X?+都表示一次或一次也没有),但他们之间还是有一些细微的区别的。我们先来看一个例子:
1.Greedy
结果:
matched form 0 to 13
2.Reluctant
结果:
matched form 0 to 4
matched form 4 to 13
3.Possessive
结果:
//未匹配成功
原理讲解
Greedy数量词被称为“贪婪的”是因为匹配器被强制要求第一次尝试匹配时读入整个输入串,如果第一次尝试匹配失败,则从后往前逐个字符地回退并尝试再次匹配,直到匹配成功或没有字符可回退。
模式串:.*foo
查找串:xfooxxxxxxfoo
结果:matched form 0 to 13
其比较过程如下
Reluctant采用与Greedy相反的方法,它从输入串的首(字符)位置开始,在一次尝试匹配查找中只勉强地读一个字符,直到尝试完整个字符串。
模式串:.*foo
查找串:xfooxxxxxxfoo
结果:matched form 0 to 4
matched form 4 to 13
其比较过程如下
Possessive数量词总是读入整个输入串,尝试一次(仅且一次)匹配成功,不像Greedy,Possessive从不回退,即便这样做也可能使整体匹配成功。
模式串:.*foo
查找串:xfooxxxxxxfoo
结果:
//未匹配成功
其比较过程如下
参考文章:http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
再来看看几个例子:
模式串:.+[0-9]
查找串:abcd5aabb6
结果:matched form 0 to 10
模式串:.+?[0-9]
查找串:abcd5aabb6
结果:matched form 0 to 4
模式串:.{1,9}+[0-9]
查找串:abcd5aabb6
结果:matched form 0 to 10
模式串:.{1,10}+[0-9]
查找串:abcd5aabb6
结果:匹配失败
- 正则表达式的贪婪式,懒惰式,占有式
- 正则表达式的贪婪与懒惰
- 正则表达式的贪婪与懒惰模式
- 正则表达式的贪婪与懒惰模式
- 正则表达式的贪婪与懒惰模式
- 正则表达式--贪婪与懒惰
- 贪婪与懒惰--正则表达式
- 正则表达式 贪婪与懒惰
- 正则表达式的贪婪和懒惰的表达式
- (PHP)正则表达式-贪婪匹配与懒惰匹配的区别
- 正则表达式学习笔记011--贪婪和懒惰的匹配
- 正则表达式的贪婪匹配与懒惰匹配
- Chapter 3 正则表达式的贪婪与懒惰
- 正则表达式的【贪婪匹配】和【懒惰匹配】
- 正则表达式的贪婪匹配与懒惰匹配
- 正则表达式的贪婪匹配与懒惰匹配
- 正则表达式懒惰匹配,和贪婪匹配
- 正则表达式学习记录-贪婪与懒惰
- 零散知识点:简单理解回调函数
- C/C++常见gcc编译链接错误解决方法
- UVA 140 Bandwidth
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
- jsp中为表格添加水平滚动条
- 正则表达式的贪婪式,懒惰式,占有式
- HDU-1159-Common Subsequence【LCS】
- OFBIZ分享:如何让OFBIZ使用中文界面
- 大数阶乘
- IntelliJ IDEA 常用快捷键整理
- hdu5826 物理+积分
- BZOJ2160: 拉拉队排练
- pdf转化为图片显示知多少
- 秒杀多线程第一篇 多线程笔试面试题汇总