匹配除指定string以外的所有内容

我知道以下正则expression式将匹配“红色”,“绿色”或“蓝色”。

red|green|blue 

有没有一个简单的方法,使其匹配除了几个指定的string的一切?

5 Solutions collect form web for “匹配除指定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式引擎。

  • 在string中查找最长的重复序列
  • 用findall捕获组?
  • 正则expression式的复杂性是什么?
  • 正则expression式收集最后/
  • 从string中删除新行
  • 为什么String.split需要pipe道分隔符才能被转义?
  • Xcode 4中的expression式窗口在哪里?
  • 什么时候“不”不是否定?
  • 在Python中查找所有出现的子string
  • 函数只返回string中的字母数字字符?
  • 将任何string转换为骆驼的情况