正则表达阴性组

时间:2015-11-29 17:27:42

标签: php regex pcre

我正在尝试用正则表达式来匹配和捕捉包含“球”的任何单词,而不会在其前面放置“脚”或“篮子”。 例如,我想匹配“排球”和“躲避球”而不是“篮球”或“足球”。 重要的是我不能使用积极的群体而是消极的群体。 我尝试了什么:

[^(?:foot|basket)(ball)]

!(?:foot|basket)(ball)
发现相反的情况相当简单:

(?:foot|basket)(ball)

但这不是我想要的。我反过来需要它。

编辑:这是php,它是一个“preg_replace”命令。

2 个答案:

答案 0 :(得分:3)

PHP使用PCRE。因此,可以使用负面的后观语法:

(?<!foot|basket)ball

答案 1 :(得分:0)

我会隔离所有子串ball,然后在其后面强制执行任何脚或篮子。

\b(?:(?!ball)\w)*(?:(?<!foot)(?<!basket)ball(?:(?!ball)\w)*)+\b
或者,我认为pcre可以通过这种方式做出断言 \b(?:(?!ball)\w)*(?:(?<!foot|basket)ball(?:(?!ball)\w)*)+\b

格式化:

 \b 
 (?:
      (?! ball )
      \w 
 )*
 (?:
      (?<! foot )
      (?<! basket )
      ball
      (?:
           (?! ball )
           \w 
      )*
 )+
 \b