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