7.4 懒惰量词
现在让我们把贪心特性放到一边而来看看懒惰量词。理解懒惰特性最好的方式就是看看实际应用。请在Reggy(确定Match All没有被勾选)中尝试用问号(?
)匹配零个或者一个5:
5?
第一个5被标亮了。请再加一个?
来使量词变为懒惰的:
5??
现在它看起来不匹配任何内容了,其原因是该模式已经是懒惰的了。也就是说,它不会强制匹配第一个5。懒惰的基本特性就是匹配尽可能少的字符——它就是个“懒虫”。
试一下匹配零次或多次的量词:
5*?
它也不会匹配任何内容,因为它可以选择匹配最少的次数——零次。
再试一下匹配一次或多次:
5+?
看到了吧,懒惰特性使其只匹配了一个5。它只需要做到这个程度就可以了。
使用m和n方式匹配时就更为有趣了。请尝试:
5{2,5}?
只匹配了两个5,而不像贪心量词那样匹配五个。
表7-3列出了懒惰量词。什么时候懒惰式匹配最实用?如果你想匹配最少而不是最多数目的字符,就可以使用懒惰量词。
表7-3 懒惰量词
语法 | 描述 |
---|---|
?? | 懒惰匹配零次或一次(可选) |
+? | 懒惰匹配一次或多次 |
*? | 懒惰匹配零次或多次 |
{n}? | 懒惰匹配n次 |
{n,}? | 懒惰匹配n次或多次 |
{m,n}? | 懒惰匹配m至n次 |