匹配除指定string以外的所有内容
我知道以下正则expression式将匹配“红色”,“绿色”或“蓝色”。
red|green|blue 有没有一个简单的方法,使其匹配除了几个指定的string的一切?
 如果你想确保string不是红色,绿色和蓝色,caskey的答案是这样的。 然而,通常想要的是确保线路中的任何地方不包含红色,绿色或蓝色。 为此,将正则expression式与^和包含.*一起固定在负向视图中: 
 ^(?!.*(red|green|blue)) 
此外,假设你想要包含单词“引擎”但没有任何这些颜色的行:
 ^(?!.*(red|green|blue)).*engine 
 你可能会认为你可以将.*作为正则expression式的头部: 
 ^.*(?!red|green|blue)engine # Does not work 
 但是你不能。 你必须有两个实例.*才能工作。 
取决于语言,但总体来说,你可以这样写:
 (?!red|green|blue) 
(感谢语法修复,上面是有效的Java和Perl,YMMV)
你不需要负面的预测。 有一个工作的例子:
 /([\s\S]*?)(red|green|blue)/g 
描述:
-   [\s\S]– 匹配任何字符
-   *– 从0到无限的前一组匹配
-  ?– 尽可能less的匹配
-   (red|green|blue)– 匹配其中一个单词
-   g– 重复模式
例:
 redwhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredwhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredredgreenredgreenredgreenredgreenredgreenbluewhiteredbluewhiteredbluewhiteredbluewhiteredbluewhitered 
将会:
 whitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhite 
 testing一下: regex101.com 
采取1155步骤,但如果有人可以改善我将不胜感激。
我有同样的问题,提出的解决scheme几乎工作,但他们有一些问题。 最后,我使用的正则expression式是:
 ^(?!red|green|blue).* 
我用Javascript和.NETtesting了它。
。*不应该被放置在像这样的负向视图之内:或者它会使第一个元素的行为与其他元素不同(即“anotherred”不会被匹配,而“另一种绿色“会)
匹配任何东西,但给定的string
如果你想匹配整个string,你想匹配的东西,但某些string,你可以这样做:
 ^(?!(red|green|blue)$).*$ 
这就是说,从string的开始处开始匹配,不能以红色,绿色或蓝色开始,以string的末尾匹配其他任何内容。
你可以在这里试试: https : //regex101.com/r/rMbYHz/2
请注意,这只适用于支持负向预测的正则expression式引擎。