懒惰量词则使用另一种匹配策略。它从目标的起始位置开始尝试寻找匹配,每次检查字符串的一个字符,寻找它要匹配的内容。最后,它会尝试匹配整个字符串。要使一个量词成为懒惰的,必须在普通量词后添加一个问号(?)。它每次只 “吃” 一点。
总的说来,懒惰量词就是尽量匹配最少的字符,而贪心量词则是尽量匹配最多的字符。
要理解什么是懒惰量词,最好的方式是通过实例。在正则表达式测试工具中,输入 “5?” 模式,该模式将匹配另个或者一个 5。如下图:
上图中,5那一行被匹配了。这是因为 ? 表示匹配零个或一个,且默认正则表达式使用贪心模式。如果你在 ? 后面再添加一个 ? 来使量词变成懒惰匹配,如下图:
上图中,模式 “5??” 将不会匹配任何内容了,这是因为该模式已经是懒惰匹配了。也就是说,它不会强制匹配第一个 5。懒惰的基本特性就是匹配尽可能少的字符(? 量词表示匹配零个或一个,懒惰模式选择匹配零个,因为零个最少,符合懒惰原则)。
你也可以试试匹配零次或多次的量词(*),如下图:
上图中,模式 “5*?” 依然不会匹配任何内容,因为他可以选择匹配最少的次数是零次。
再试试匹配一次或多次(+),如下图:
看到了吧!上图中,“5+?” 模式仅仅匹配了一个 5,这是因为懒惰特性的原则所导致的,量词 + 将匹配一个或多个。
如果你有兴趣,可以试试大括号语法 “{n,m}” 懒惰模式,如下图:
上图中,模式 “5{2,}?” 只匹配了两个 5,而不像贪心模式那样匹配整行的 5。什么时候使用懒惰匹配最合适?如果你想匹配最少而不是最多数目的字符,就可以使用懒惰匹配。
下图列出了懒惰量词:
懒惰量词语法:在其他量词后面添加一个问号(?),例如:5+?、5{2,}?
懒惰匹配原则:懒惰匹配将匹配最少数目的字符;
懒惰适合场景:如果你想匹配最少而不是最多数目的字符,就可以使用懒惰匹配;