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

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

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

(?<!foo)bar

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

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

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

(?<!foo.*)bar

还有其他方法吗?

更新:
正则表达式风格是回复2。我目前正在审查文档,但乍一看注意到了以下几点:

(?<!re)     after text not matching re (NOT SUPPORTED)

因此,解决方案不能使用负向后视(如果我正确解释了文档的话)。

答案1

修正帖子

因此,似乎有些(大多数?)正则表达式引擎只适用于固定长度的后向查找。但是,它们似乎可以接受可变长度的前向查找。我不确定你的用例是什么,也不确定它的可行性如何,但一个想法可能是反转你的字符串,然后使用:

rab(?!.*oof)

在此处输入图片描述

当然,它看起来很荒谬,我不知道你会如何使用它,也不知道它有多大用处。我使用 Regex 的大部分经验都是使用 .NET,而且大多不需要后向查找。这只是给你的一个想法...!

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

尝试以下正则表达式:

(?<!foo(?:.*)?)bar

这会在相同的负面观察中添加一个可选的、非捕获组。

在此处输入图片描述

相关内容