0

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

4

2 回答 2

6

您可以在组之前使用否定的lookbehind (is|was)

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

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

于 2012-07-03T16:02:36.960 回答
-1
/^((([^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? (.+?)$/
于 2012-07-03T16:13:07.543 回答