7.4 懒惰量词

现在让我们把贪心特性放到一边而来看看懒惰量词。理解懒惰特性最好的方式就是看看实际应用。请在Reggy(确定Match All没有被勾选)中尝试用问号(?)匹配零个或者一个5:

  1. 5?

第一个5被标亮了。请再加一个?来使量词变为懒惰的:

  1. 5??

现在它看起来不匹配任何内容了,其原因是该模式已经是懒惰的了。也就是说,它不会强制匹配第一个5。懒惰的基本特性就是匹配尽可能少的字符——它就是个“懒虫”。

试一下匹配零次或多次的量词:

  1. 5*?

它也不会匹配任何内容,因为它可以选择匹配最少的次数——零次。

再试一下匹配一次或多次:

  1. 5+?

看到了吧,懒惰特性使其只匹配了一个5。它只需要做到这个程度就可以了。

使用mn方式匹配时就更为有趣了。请尝试:

  1. 5{2,5}?

只匹配了两个5,而不像贪心量词那样匹配五个。

表7-3列出了懒惰量词。什么时候懒惰式匹配最实用?如果你想匹配最少而不是最多数目的字符,就可以使用懒惰量词。

表7-3 懒惰量词

语法描述
??懒惰匹配零次或一次(可选)
+?懒惰匹配一次或多次
*? 懒惰匹配零次或多次
{n}?懒惰匹配n次
{n,}? 懒惰匹配n次或多次
{m,n}? 懒惰匹配m至n次