正则表达式 - 其中字符串包含“bar”但前面没有“foo”

Fit*_*roy 6 regex

我目前有一个正则表达式来匹配字符串包含“bar”但前面没有“foo”的地方:

(?<!foo)bar
Run Code Online (Sandbox Code Playgroud)

我希望修改正则表达式以匹配字符串包含“bar”但前面没有“foo”和(可选)任何其他字符的位置。

例如。“footestbar”不应匹配,因为 bar 前面是“foo”,后面是“test”。

我找不到实现此目的的方法,因为正则表达式不允许在负向后查找中使用量词。随后我无法执行以下操作:

(?<!foo.*)bar
Run Code Online (Sandbox Code Playgroud)

有替代方法吗?

更新:
正则表达式风格是re2。我目前正在查看文档,但乍一看注意到以下内容:

(?<!re)     after text not matching re (NOT SUPPORTED)
Run Code Online (Sandbox Code Playgroud)

因此,该解决方案不能使用负向后查找(如果我正确解释文档)。

Jon*_*nno 3

修改后的帖子

因此,似乎某些(大多数?)正则表达式引擎仅适用于固定长度的lookbehind。然而,他们似乎可以接受可变长度的前瞻。我不确定你的用例是什么或者它的可行性如何,但一个想法可能是反转你的字符串,并使用:

rab(?!.*oof)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当然,它看起来很可笑,我不知道你如何使用它,或者它会有多大用处。我在 Regex 方面的大部分经验都是使用 .NET,并且大多数不需要回顾。只是给你一个想法..!

原始帖子 - 仅适用于某些正则表达式引擎(使用.NET进行测试)

尝试以下正则表达式:

(?<!foo(?:.*)?)bar
Run Code Online (Sandbox Code Playgroud)

这会在相同的负向后查找中添加一个可选的非捕获组。

在此输入图像描述