/^(.+?) (is|was) an? (.+?)$/
是我目前PHP preg_match
函数的正则表达式。
但我不希望它与句子匹配:"what is a dog"
或"who is a dog"
。因此,我必须以某种方式指定第一组中“什么”和“谁”不应该匹配。
我该怎么做?
感谢。
编辑:为了澄清,我希望它能匹配"Buddy is an animal"
和"jsbvsjvdhbjsbjhv is a dog"
等句子。
答案 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? (.+?)$/