/^(.+?) (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? (.+?)$/