延迟匹配不能按预期工作

时间:2016-08-08 00:47:45

标签: regex

我有以下字符串:

abc1def1ghij2klmc

我正在尝试构建一个正则表达式,提取1到2之间的最短(懒惰)字符串。在上面的示例中,我需要提取1ghij2

正则表达式1.*2匹配1def1ghij2

懒惰的正则表达式1.*?2匹配1def1ghij2

如何提取1到2之间的最短字符串?

我期待这里的懒人比赛工作。也许我误解了懒惰的比赛概念?

1 个答案:

答案 0 :(得分:1)

1[^12]*2    

您可以详细了解原始模式的匹配方式,所有正则表达式引擎都一步一步地进行操作,这里:https://regex101.com/r/x22lDS/1/debugger

以人类语言运行的此正则表达式的解释: regex引擎会检查您的目标文本,从您的文本的开头(字母“ a”)开始,检查您的模式是否匹配某项,然后它在右边没有匹配的情况下继续一个接一个的字符,直到第一个“ 1”,将其匹配,然后继续匹配一个字符,然后将它们全部匹配,直到包括“ 2”。因此,第二个“ 1”也被匹配。请查看上面包含的链接,以查看实际效果。

您可以尝试在现有“ 2”的右侧放置另一个“ 2”,在regex101.com中运行原始模式,您会发现它与以前的字符串相同,但没有扩展-在这种情况下,惰性功能可以通过这种方式起作用。

希望这会有所帮助:)