正则表达式之我见—限定符
限定符指定在输入中必须存在字符、组或字符类的多少个实例才能找到匹配项。下表列出了支持的限定符。
贪婪限定符 | 惰性限定符 | 说明 |
---|---|---|
* | *? | 匹配零次或多次。 |
+ | +? | 匹配一次或多次。 |
? | ?? | 匹配零次或一次。 |
{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,}?