2013-06-05 89 views
11

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

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

我目前拥有的正则表达式:

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

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

在最后一种情况下,正则表达式是不是表现得像个我想要的。它应该匹配“红色”,因为“红色”不是(“红色”,“绿色”或“蓝色”)。

任何想法如何解决正则表达式?

回答

11

可以包括串锚月底在先行

^(?!(red|blue|green)$) 
+0

此正则表达式匹配的是什么。你测试过了吗? – rafaame

+0

@rafaame yup;匹配测试,测试和redtest,但不是红色http://rubular.com/r/b9eMsVln1W –

+0

@rafaame可能尝试添加'。*'在最后如果你需要实际捕获字符串 –

2

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

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

看看这个在Rubular

0

像这样的正则表达式包含第二个块的条件 - YOUR_REGEXP,并排除第一个块的条件。在这种情况下,如果你的字符串将包含绿色蓝色结果总是

'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)' 
相关问题