我目前有一个正则表达式来匹配字符串包含“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)
因此,该解决方案不能使用负向后查找(如果我正确解释文档)。
因此,似乎某些(大多数?)正则表达式引擎仅适用于固定长度的lookbehind。然而,他们似乎可以接受可变长度的前瞻。我不确定你的用例是什么或者它的可行性如何,但一个想法可能是反转你的字符串,并使用:
rab(?!.*oof)
Run Code Online (Sandbox Code Playgroud)
当然,它看起来很可笑,我不知道你如何使用它,或者它会有多大用处。我在 Regex 方面的大部分经验都是使用 .NET,并且大多数不需要回顾。只是给你一个想法..!
尝试以下正则表达式:
(?<!foo(?:.*)?)bar
Run Code Online (Sandbox Code Playgroud)
这会在相同的负向后查找中添加一个可选的非捕获组。
归档时间: |
|
查看次数: |
10128 次 |
最近记录: |