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


我需要一个正则表达式(将在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”)。

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


5244
2018-06-05 02:23


起源



答案:


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

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

10
2018-06-05 02:35



这个正则表达式什么都没有匹配。你测试过吗? - rafaame
@rafaame是的;匹配测试,测试和红色测试,但不是红色 rubular.com/r/b9eMsVln1W - Explosion Pills
@rafaame或许尝试添加 .* 最后,如果你需要实际捕获字符串 - Explosion Pills


答案:


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

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

10
2018-06-05 02:35



这个正则表达式什么都没有匹配。你测试过吗? - rafaame
@rafaame是的;匹配测试,测试和红色测试,但不是红色 rubular.com/r/b9eMsVln1W - Explosion Pills
@rafaame或许尝试添加 .* 最后,如果你需要实际捕获字符串 - Explosion Pills


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

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

看看这个 Rubular


2
2018-06-05 05:35





像这样的Regexp包括第二块的条件 - YOUR_REGEXP,并排除第一个块的条件。在这种情况下,如果您的字符串将包含 绿色 要么 蓝色 结果 总是 将会

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

0
2017-09-11 12:36