正则表达式的贪婪匹配和费贪婪匹配
2011-12-07 00:42
302 查看
正则表达式的贪婪匹配和非贪婪匹配
By default, pattern matching is greedy, which means that the matcher returns the longest match possible. For example, applying the patternA.*cto
AbcAbcAmatches
AbcAbcrather
than the shorter
Abc. To do nongreedy matching, a question mark must be added to the quantifier. For example, the pattern
A.*?cwill
find the shortest match possible.
// Greedy quantifiers
String match = find("A.*c","AbcAbc"); // AbcAbc
// Nongreedy quantifiers
match = find("A.*?c","AbcAbc"); // Abc
关于?=
http://topic.csdn.net/u/20100902/16/9a8f2249-86f2-4f80-b5f5-dbf8769ba674.html
贪婪量词:
先看整个字符串是不是一个匹配。如果没有发现匹配,它去掉最后字符串中的最后一个字符,并再次尝试。如果还是没有发现匹配,那么 再次去掉最后一个字符串,这个过程会一直重复直到发现一个匹配或者字符串不剩任何字符。简单量词都是贪婪量词。 |
先看字符串中的第一个字母是不是一个匹配,如果单独着一个字符还不够,就读入下一个字符,组成两个字符的字符串。如果还没有发现匹配,惰性量词继续从字符串中添加字符直到发现一个匹配或者整个字符串都检查过也没有匹配。惰性量词和贪婪量词的工作方式恰好相反。 |
只尝试匹配整个字符串。如果整个字符串不能产生匹配,不做进一步尝试。 |
-------------------------------------------------------------------------------------
? ?? ?+ 可以出现0次或1次,但至多出现1次
* *? *+ 可以出现任意次,也可以不出现
+ +? ++ 出现1次或多次,但至少出现1次
{n} {n}? {n}+ 一定出现n次
{n,m} {n,m}? {n,m}+ 至少出现n次,但至多不能超过m次
{n,} {n,}? {n,}+ 可以出现任意次,但至少出现n次
例如:我们要从字符串abbbaabbbaaabbb1234中获得abbb,aabbb,aaabbb的匹配
1、贪婪量词
1 var regexp = /.*bbb/g; 2 var a = str.match(regexp); 3 alert(a.length); //output:1 4 alert(a[0]); //output:abbbaabbbaaabbb |
a)abbbaabbbaaabbb1234
b)abbbaabbbaaabbb123
c)abbbaabbbaaabbb12
d)abbbaabbbaaabbb1
e)abbbaabbbaaabbb //true
可以看到,贪婪量词在取得一次匹配后就会停止工作,虽然我们加了'g'(全局匹配)
2、惰性量词
1 var regexp = /.*?bbb/g; 2 var a = str.match(regexp); 3 alert(a.length); //output:3 4 alert(a[0]); //output:abbb 5 alert(a[1]); //output:aabbb 6 alert(a[2]); //output:aaabbb |
a)a
b)ab
c)abb
d)abbb //保存结果,并从下一个位置重新开始
e)a
f)aa
g)aab
h)aabb
j)aabbb //保存结果,并从下一个位置重新开始
e)a
e)aa
e)aaa
e)aaab
e)aaabb
e)aaabbb //保存结果,并从下一个位置重新开始
由于JS是不支持支配量词的,所以支配量词我们只能用JAVA来演示:
1 String string = "abbbaabbbaaabbb1234"; 2 Pattern p = Pattern.compile(".*+bbb"); 3 Matcher m = p.matcher(string); 4 System.out.println(m.find()); //output:false 5 |
a)abbbaabbbaaabbb1234 //false
http://java.chinaitlab.com/base/773980.html
相关文章推荐
- (学习)python非贪婪、多行匹配正则表达式例子
- javascript正则表达式之匹配任何字符和非贪婪匹配
- python 正则表达式的贪婪匹配与非贪婪匹配
- js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
- (学习)python非贪婪、多行匹配正则表达式例子 分类: 正则表达式 2013-08-19 11:21 2540人阅读 评论(2) 收藏
- python非贪婪、多行匹配正则表达式
- 正则表达式笔记 3 贪婪、勉强、独占三种匹配量词
- hive中巧用正则表达式的贪婪匹配
- (学习)python非贪婪、多行匹配正则表达式例子
- [Python]解决正则表达式的"贪婪"匹配
- PHP正则表达式-贪婪与懒惰匹配
- js正则表达式的贪婪匹配和非贪婪匹配
- 正则表达式--递归匹配、非贪婪匹配与分组替换
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- 非贪婪匹配:如何使用正则表达式碰到到第一个匹配到的字符串就停止
- 正则表达式中贪婪和非贪婪(惰性)匹配的区别与效率问题
- 正则表达式的贪婪和非贪婪匹配
- Java-----正则表达式匹配模式[贪婪模式、勉强模式、占有模式]
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- Python正则表达式非贪婪、多行匹配功能示例