15

我需要一个匹配除特定字符串之外的任何内容的正则表达式(将用于 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”)。

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

4

3 回答 3

10

您可以在前瞻中包含字符串锚的结尾

 ^(?!(red|blue|green)$)
于 2013-06-05T02:35:01.230 回答
2

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

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

在Rubular看看这个。

于 2013-06-05T05:35:15.597 回答
0

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

'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)'
于 2015-09-11T12:36:58.933 回答