懒惰匹配

懒惰量词则使用另一种匹配策略。它从目标的起始位置开始尝试寻找匹配,每次检查字符串的一个字符,寻找它要匹配的内容。最后,它会尝试匹配整个字符串。要使一个量词成为懒惰的,必须在普通量词后添加一个问号(?)。它每次只 “吃” 一点。

总的说来,懒惰量词就是尽量匹配最少的字符,而贪心量词则是尽量匹配最多的字符。

要理解什么是懒惰量词,最好的方式是通过实例。在正则表达式测试工具中,输入 “5?” 模式,该模式将匹配另个或者一个 5。如下图:

上图中,5那一行被匹配了。这是因为 ? 表示匹配零个或一个,且默认正则表达式使用贪心模式。如果你在 ? 后面再添加一个 ? 来使量词变成懒惰匹配,如下图:

上图中,模式 “5??” 将不会匹配任何内容了,这是因为该模式已经是懒惰匹配了。也就是说,它不会强制匹配第一个 5。懒惰的基本特性就是匹配尽可能少的字符(? 量词表示匹配零个或一个,懒惰模式选择匹配零个,因为零个最少,符合懒惰原则)。

你也可以试试匹配零次或多次的量词(*),如下图:

上图中,模式 “5*?” 依然不会匹配任何内容,因为他可以选择匹配最少的次数是零次。

再试试匹配一次或多次(+),如下图:

看到了吧!上图中,“5+?” 模式仅仅匹配了一个 5,这是因为懒惰特性的原则所导致的,量词 + 将匹配一个或多个。

如果你有兴趣,可以试试大括号语法 “{n,m}” 懒惰模式,如下图:

上图中,模式 “5{2,}?” 只匹配了两个 5,而不像贪心模式那样匹配整行的 5。什么时候使用懒惰匹配最合适?如果你想匹配最少而不是最多数目的字符,就可以使用懒惰匹配。

下图列出了懒惰量词:

知识点

  • 懒惰量词语法:在其他量词后面添加一个问号(?),例如:5+?、5{2,}?

  • 懒惰匹配原则:懒惰匹配将匹配最少数目的字符;

  • 懒惰适合场景:如果你想匹配最少而不是最多数目的字符,就可以使用懒惰匹配;

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号