我有以下字符串:
abc1def1ghij2klmc
我正在尝试构建一个正则表达式,提取1到2之间的最短(懒惰)字符串。在上面的示例中,我需要提取1ghij2
正则表达式1.*2
匹配1def1ghij2
懒惰的正则表达式1.*?2
匹配1def1ghij2
如何提取1到2之间的最短字符串?
我期待这里的懒人比赛工作。也许我误解了懒惰的比赛概念?
答案 0 :(得分:1)
1[^12]*2
您可以详细了解原始模式的匹配方式,所有正则表达式引擎都一步一步地进行操作,这里:https://regex101.com/r/x22lDS/1/debugger
以人类语言运行的此正则表达式的解释: regex引擎会检查您的目标文本,从您的文本的开头(字母“ a”)开始,检查您的模式是否匹配某项,然后它在右边没有匹配的情况下继续一个接一个的字符,直到第一个“ 1”,将其匹配,然后继续匹配一个字符,然后将它们全部匹配,直到包括“ 2”。因此,第二个“ 1”也被匹配。请查看上面包含的链接,以查看实际效果。
您可以尝试在现有“ 2”的右侧放置另一个“ 2”,在regex101.com中运行原始模式,您会发现它与以前的字符串相同,但没有扩展-在这种情况下,惰性功能可以通过这种方式起作用。
希望这会有所帮助:)