貪婪量詞:

惰性量詞:

支配量詞:

貪婪量詞 惰性量詞 支配量詞 描述
-------------------------------------------------------------------------------------
? ?? ?+ 可以出現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

2

3

4

貪婪量詞的工作過程可以這樣表示:
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

2

3

4

5

6

惰性量詞的工作過程可以這樣表示:
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

2

3

4

5

因為支配量詞采用一刀切的匹配方式,如:
a)abbbaabbbaaabbb1234 //false