正则表达式:如果有多个比赛,我想“放弃”整个比赛

时间:2019-12-18 17:08:42

标签: regex regex-lookarounds

我对Regex来说还很陌生,所以请在这里忍受。我想匹配字符串{{body}},但是如果它出现多次,则我不希望表达式匹配任何内容。我将提供一个示例和尝试过的内容,以便更轻松地说明我要实现的目标。

我的正则表达式:

(?< !{{body}}){{body}}{1}(?!{{body}})

输入字符串

{{body}}{{body}}

结果与预期的不匹配,但是如果我将输入字符串更改为以下内容:

输入字符串

{{body}}   foobar {{body}
# or
{{body}} foobar   {{body}}

我在所有标签{{body}}上都找到了一个匹配项,并且我不希望有任何匹配项,因为{{body}}出现了多次。

1 个答案:

答案 0 :(得分:0)

使用嵌套的断言和原子组,它可以快速匹配字符串
具有单个{{body}}标记的字符串中也没有其他标记。

(?s)^(?=(?>(.*?{{body}}))(?!.*{{body}})).+

可以看到这是基于行https://regex101.com/r/TtuMqA/1

或者,相同但没有原子团:

(?s)^(?=(.*?{{body}}))\1(?!.*{{body}}).*

https://regex101.com/r/dd3Kga/1