Regex - 匹配除特定字符串之外的任何内容

时间:2013-06-05 02:23:03

标签: regex preg-match regex-negation

我需要一个正则表达式(将在ZF2路由中使用,我相信它使用php的preg_match)匹配除特定字符串之外的任何内容。

例如:我需要匹配除“红色”,“绿色”或“蓝色”之外的任何内容。

我目前有正则表达式:

^(?!red|green|blue).*$

test -> match (correct)
testred -> match (correct)
red -> doesn't match (correct)
redtest -> doesn't match (incorrect)

在最后一种情况下,正则表达式的行为并不像我想要的那样。它应匹配“redtest”,因为“redtest”不是(“red”,“green”或“blue”)。

关于如何修复正则表达式的任何想法?

3 个答案:

答案 0 :(得分:10)

您可以在前瞻

中包含字符串锚点的结尾
 ^(?!(red|blue|green)$)

答案 1 :(得分:2)

也许这个正则表达式可以帮助你:

^(?!red|green|blue)(.+)|(.+)(?<!red|green|blue)$

请查看Rubular

答案 2 :(得分:0)

像这样的Regexp包括第二个块的条件 - YOUR_REGEXP ,并排除第一个块的条件。在这种情况下,如果您的字符串包含红色绿色蓝色结果始终 false < /强>

'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)'