我正在尝试用正则表达式来匹配和捕捉包含“球”的任何单词,而不会在其前面放置“脚”或“篮子”。 例如,我想匹配“排球”和“躲避球”而不是“篮球”或“足球”。 重要的是我不能使用积极的群体而是消极的群体。 我尝试了什么:
[^(?:foot|basket)(ball)]
!(?:foot|basket)(ball)
发现相反的情况相当简单:
(?:foot|basket)(ball)
但这不是我想要的。我反过来需要它。
编辑:这是php,它是一个“preg_replace”命令。答案 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