Regex 非贪婪的匹配仍然太贪婪

Regex 非贪婪的匹配仍然太贪婪,regex,Regex,我有一个正则表达式模式,需要捕获最短的匹配,但是惰性匹配在嵌套该模式的情况下不起作用。我的意思是: 正则表达式模式: /{{.*?}}/ 示例字符串: {{This}} is {{an example {{sentence}}}} 在上面的例子中,我希望拉{{This}和{{session},因为这是最短的匹配,但是我得到的是{{This}和{{anexample{session}。为什么非贪婪的匹配仍然如此贪婪——或者说,我哪里出错了?试试:{{[^{]*?} 这是因为“{”字符不应出现在

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

正则表达式模式:

/{{.*?}}/
示例字符串:

{{This}} is {{an example {{sentence}}}}
在上面的例子中,我希望拉{{This}和{{session},因为这是最短的匹配,但是我得到的是{{This}和{{anexample{session}。为什么非贪婪的匹配仍然如此贪婪——或者说,我哪里出错了?

试试:{{[^{]*?} 这是因为“{”字符不应出现在内部字符串中。它与您期望的匹配。

请尝试:{{{[^{]*?} 这是因为“{”字符不应出现在内部字符串中。它确实与您期望的匹配。

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

\{{2}[^\{]*?\}{2}
请参见演示

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

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

请参见演示

。匹配任何字符,这就是为什么要匹配{{后跟任何字符,但第一个}之前的换行。.匹配任何字符,这就是为什么要匹配{后跟任何字符,但第一个}之前的换行谢谢@ CYB3RFLAS3R,我并没有考虑一个负算子。我还不确定100%,我知道为什么会发生这种情况。我认为非贪婪总是优先考虑最短的可用匹配-但实际上这解决了我的问题。谢谢@ CYB3RFLY3R,我没有考虑一个负运算符。我仍然不是100%肯定我理解为什么这是HAPPE。宁-我认为非贪婪总是优先考虑最短的匹配-但实际上这解决了我的问题。