正则表达式里匹配次数的元字符有: 
(一) {0,1}{0,}{1,}{3} 逗号前面次数到逗号后面次数 
(二) ??? 0次或1次 
(三) * 0次以上,即0~n 
(四) + 1次以上,即1~n

下面深入讲解下这几个元字符的意义:

 

(一) {0,1}{0,}{1,}{3} 逗号前面次数到逗号后面次数

上面列了几种都是{}用于表示次数时常见的写法。 
1. {0,1} 匹配0次或1次 
2. {0,} 匹配0次以上,逗号后面为空表示无限次的意思 
3. {1,} 匹配1次以上 
4. {3} 匹配3次,它是{3,3}的简写形式

需要注意的是,前面数字大于后面数字是会报错的

有时候会看到[0-9]{1}这样的写法,其实这样写也算是多余的,它等价[0-9],正则里没有添加量词修饰的匹配都是按1次算。

 

(二) ??? 0次或1次

非贪婪模式的读者可能马上想到非贪婪模式,不错,利用非贪婪模式可以解决这个问题: 
正则:^(www\.)*?(.+)$ 
当然,使用正则:^(www\.){0,1}?(.+)$也是可以的,而且这个更接近原本的意思。 
另外,很多人可能没见过,其实我们还能用:^(www\.)??(.+)$实现。这里的???的非匹配优先版本。

 

(三) * 0次以上,即0~n

的字符0次以上

大家可能发现,.*? 这里也有?,但是它已经脱离了前面对?介绍的0次或1次的范围,没错,只是为了让大家不至于混淆,我没有把它归入上面的?当中。 
我们可以理解为,?只要跟本文所说的几个计次量词结合,就形成非贪婪模式。甚至,连??你都可以认为是结合后的0次或1次的非贪婪模式,反正也能解释通不是?

 

(四) + 1次以上,即1~n

的字符1次以上

 

总结

量词本身使用时,都是贪婪模式匹配,而量词和?能结合成非贪婪模式匹配。 
贪婪模式匹配就是尽可能多地匹配,非贪婪模式匹配就是尽可能少地匹配。

相关文章: