php - 正则表达式匹配字符串 BAR,只要它之前没有出现字符串 FOO

标签 php regex

我正在尝试编写一个正则表达式,该正则表达式仅适用于包含 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/

相关文章:

javascript - 如何同时验证中文(unicode)和英文名称?

php - Nagios/MySQL 错误

php - 检查字符串是否包含数组的任何值?

php - 使用函数获取标题和标题标签

php - Laravel ModelNotFoundException : No query results for model []

javascript - 正则表达式返回 True 和 False

php - 如何使用javascript获取浏览器存储的cookie

javascript - 使用多个定界符和 Concat 拆分字符串

php - 使用正则表达式在 PHP 中命名捕获

Ruby 字符串搜索 : which is faster split or regex?