我需要一个正则表达式(将在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”)。
关于如何修复正则表达式的任何想法?
答案 0 :(得分:10)
您可以在前瞻
中包含字符串锚点的结尾 ^(?!(red|blue|green)$)
答案 1 :(得分:2)
答案 2 :(得分:0)
像这样的Regexp包括第二个块的条件 - YOUR_REGEXP ,并排除第一个块的条件。在这种情况下,如果您的字符串包含红色,绿色或蓝色结果始终将 false < /强>
'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)'