/^(.+?) (is|was) an? (.+?)$/
preg_match
是我当前对 PHP函数的正则表达式。
但我不希望它与句子匹配:"what is a dog"
或"who is a dog"
。所以我必须以某种方式指定“what”和“who”这两个词不应该与第一组匹配。
我该怎么做呢?
谢谢。
编辑:澄清一下,我希望它匹配诸如"Buddy is an animal"
and之类的句子"jsbvsjvdhbjsbjhv is a dog"
。
您可以在组之前使用否定的lookbehind (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? (.+?)$/