正则表达式之我见—限定符

限定符指定在输入中必须存在字符、组或字符类的多少个实例才能找到匹配项。下表列出了支持的限定符。

贪婪限定符惰性限定符说明
* *? 匹配零次或多次。
+ +? 匹配一次或多次。
? ?? 匹配零次或一次。
{n} {n}? 准确分配n次。
{n,} {n,}? 至少匹配 n次。
{n,m} {n,m}? 从n与m次。

数量 n 和 m 是整数常数。

这里的原则是:一般的字符后面追加限定符是(尽可能多)的匹配匹配项,限定符后面追加问号的是(尽可能少)的匹配匹配项。

tips:尽可能多=贪婪,尽可能少=惰性。

下面来一一验证吧!

1.1 *尽可能多的匹配0次或n次 和 *?尽可能少的匹配0次或n次

 

*限定符前面的o出现0次或n次,所以同时匹配zo和zoo。

*?惰性限定符则匹配满足条件的最短结果。需要注意的是*表示0次或多次,所以在这里o为0也就是结果为zo是最短的。

1.2 +尽可能多的匹配1次或n次 和 +?尽可能少的匹配1次或n次

 +限定符是一次或多次,所以此处不满足zoo条件的zo,他不能忍,只显示了zoo。

+?惰性限定符满足条件的就是最短的,超出部分竟然直接无视了...

1.3 ?尽可能多的匹配0次或1次 和 ??尽可能少的匹配0次或1次

 

?限定符前面的o出现0次或1次,对应的结果zo和zoo。

??限定符在0和1之间,选择最短的结果:即为0的情况zo。

1.4 {n}尽可能多的匹配n次 和 {n}?尽可能少的匹配n次

 

{n}限定符无论尽可能多还是尽可能少,6个a不管你怎么样排列,结果都一样。

1.5 {n,}尽可能多的匹配n次以上 和 {n,}?尽可能少的匹配n次以上

 

{n,}限定符就是n个以上,此处是3个以上,结果6个a全收了...真狠!

{n,}?限定符是最少n个,此处是3也就是3个,6个a当然是3个一组排2组了,如果n=2,就是2个一组,排3组。

1.6 {n,m}尽可能多的匹配n次到m次 和 {n,m}?尽可能少的匹配n次到m次(必须:n<m)

{n,m}限定符原则是以m的值为优先显示,这里是1-3个a,6个a被瓜分成2组3个的。如果是2-4会怎样?

看到了嘛?2个起。只要够2个,他就要了你的..

{n,m}?限定符原则是以n的值为优先显示,此处n=2,6个a按2个一组分,结果显示3组。那如果n=1呢?

看到没,m直接被无视了,一个都不放过6个a都在这里。说明在{n,m}?惰性限定符等于{n,}?

posted @ 2015-01-04 16:07  匠人  阅读(1735)  评论(0编辑  收藏  举报