我正在尝试编写一个正则表达式,该正则表达式仅适用于包含 BAR 且前面没有 FOO 的字符串。
例如,正则表达式不会匹配这个:
FOO IS BAR
但是会匹配这个:
BAZ IS BAR
最佳答案
(?<!FOO.*)BAR
是正确的正则表达式(但它只适用于 .NET 正则表达式引擎)。
(?<!FOO.*)
是 negative lookbehind assertion断言不可能匹配任何包含 FOO
的字符串在当前位置之前。
在 PHP 中,您没有无限的后视。另一种选择是
^(?:(?!FOO|BAR).)*BAR
解释:
^ # Start of string
(?: # Match...
(?! # (unless the following can be matched here:
FOO # either FOO
| # or
BAR # BAR)
) # (end of lookahead)
. # ... any character.
)* # Repeat as needed
BAR # Match BAR
但是,即使这样也不适用于已弃用的 ereg
职能。你需要preg
功能,以便能够使用环视断言。
但我认为有一种方法适用于 ereg
:
^(FO?|[^FO]|[^O]O)*BAR
解释:
^ # Start of string
( # Either match:
FO? # F or FO
| # or
[^FO] # any character except F or O
| # or
[^O]O # any non-O character followed by O
)* # any number of times
BAR # Then match BAR
但是,如果您的排除字符串比 FOO
更复杂,这将很快变得非常复杂。 ...
关于php - 正则表达式匹配字符串 BAR,只要它之前没有出现字符串 FOO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231640/