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

时间:2012-07-03 15:59:53

标签: php regex

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

但我不希望它与句子匹配:"what is a dog""who is a dog"。因此,我必须以某种方式指定第一组中“什么”和“谁”不应该匹配。

我该怎么做?

感谢。

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

2 个答案:

答案 0 :(得分:6)

你可以在(is|was)组之前使用负面的后视:

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

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

答案 1 :(得分:-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? (.+?)$/