非贪婪的比赛仍然太贪心

时间:2016-04-12 03:17:23

标签: regex

我有一个需要捕获最短匹配的正则表达式模式,但是在嵌套该模式的情况下,惰性匹配不起作用。这就是我的意思:

正则表达式:

/{{.*?}}/

示例字符串:

{{This}} is {{an example {{sentence}}}}

在上面的示例中,我希望提取{{This}}{{sentence}},因为这些是最短的匹配,但我得到的是{{This}}{{an example {{sentence}}。为什么非贪婪的比赛仍然如此贪婪 - 或者更确切地说,我哪里出错?

2 个答案:

答案 0 :(得分:6)

尝试:{{[^{]*?}} 这是因为'{'字符不应出现在内部字符串中。它符合你的期望。

答案 1 :(得分:0)

嗯,问题是.*匹配所有内容。如果您只想匹配{{}}之间的内容,可以尝试使用正则表达式:

\{{2}[^\{]*?\}{2}

请参阅演示at regex101