匹配除指定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式引擎。