Regex 惰性匹配未按预期工作
我有以下字符串:Regex 惰性匹配未按预期工作,regex,Regex,我有以下字符串: abc1def1ghij2klmc 我正在尝试构建一个正则表达式,它提取1到2之间最短的(惰性)字符串。在上面的示例中,我需要提取1ghij2 正则表达式1.*2匹配1def1ghij2 惰性正则表达式1.*.2匹配1def1ghij2 如何提取1和2之间的最短字符串 我希望在这里工作。也许我误解了懒惰匹配的概念 1[^12]*2 您可以详细了解原始模式的匹配工作原理,所有正则表达式引擎步骤都是一个接一个的,请参见: 用人类语言解释此正则表达式运行: 正则表达式引擎
abc1def1ghij2klmc
我正在尝试构建一个正则表达式,它提取1到2之间最短的(惰性)字符串。在上面的示例中,我需要提取1ghij2
正则表达式1.*2
匹配1def1ghij2
惰性正则表达式1.*.2
匹配1def1ghij2
如何提取1和2之间的最短字符串
我希望在这里工作。也许我误解了懒惰匹配的概念
1[^12]*2
您可以详细了解原始模式的匹配工作原理,所有正则表达式引擎步骤都是一个接一个的,请参见:
用人类语言解释此正则表达式运行:
正则表达式引擎检查您的目标文本,检查您的模式是否匹配某些内容,从文本的开头(字母“a”)开始,然后继续一个字符接着一个字符向右,直到第一个“1”,匹配它,然后继续匹配一个字符接着一个字符,并将它们全部匹配到“2”包括…在内因此,第二个“1”也是匹配的。请参阅上面包含的链接以查看其实际操作
您可以尝试将另一个“2”放在现有“2”的右侧,在regex101.com中运行您的原始模式,您可以看到它与之前的相同字符串匹配,而不是扩展它-在本例中,惰性功能以这种方式工作
希望这有帮助:)试试
1[^12]*2
。也就是说,查找以1
开头、不包含1
或2
且以2
结尾的子字符串。这行吗?试试1[^12]*2
。希望这能有所帮助。我的想法是:惰性限定符告诉正则表达式何时可以停止。使用1.*2
,一旦引擎找到1,它将继续运行,直到找到2
-因此它将匹配11111112
。获得所需的一种方法是,如建议的那样,在起始1
和最终2
之间不允许1
和2
。由于正则表达式引擎不需要回溯,求反字符类也会更快。作为选项:[^1]*?(?=2)
,尽管它不捕获1
和2
(即仅内部文本)