正则表达式:指定该组不应是某个单词


regex: specify that group should NOT be a certain word

/^(.+?) (is|was) an? (.+?)$/是我目前对PHP preg_match函数的正则表达式。

但我不希望它与句子相匹配:"what is a dog""who is a dog".所以我必须以某种方式指定"什么"和"谁"这两个词不应该与第一组匹配。

我该怎么做?

谢谢。

编辑:只是为了澄清,我希望它匹配"Buddy is an animal""jsbvsjvdhbjsbjhv is a dog"等句子。

您可以在(is|was)组之前使用负面回溯

/^(.+?)(?<!what|who) (is|was) an? (.+)$/

请注意,我从最后一个子模式中删除了不贪婪的量词 - 由于您希望尽可能多地匹配以到达字符串的末尾,因此告诉它尽可能少地匹配是低效的。

/^((([^w]|w[^h]|wh[^ao]|wha[^t]|what.|who.).* is)|(.+?) was) an? (.+?)$/

:)

更正,误解了问题:(what was a.*who was a.*也应该排除)。所以更简单:

/^([^w]|w[^h]|wh[^ao]|wha[^t]|what.|who.).* (is|was) an? (.+?)$/