Regex 正则表达式与行不匹配

Regex 正则表达式与行不匹配,regex,line,Regex,Line,我想问一下如何生成一个正则表达式,它将选择不包含此模式的所有行:(.*:.*) 我是这样试的 ^((?!(.*:.*)).)*$ 从中,但我无法使其工作。在我看来,您似乎正在尝试选择所有不包含:的行 为此,可以使用以下正则表达式: ^([^::]+)$只需使用此模式,为全局设置选项g,为多行设置选项m: ^([^:]*)$ 如果不想捕获空行(未指定),请将*更改为+ Fiddle:使用以下正则表达式: ^(?!(.*:.*)).*(\n|$) ?!(.*:.*)是一种消极的前瞻,以确保前

我想问一下如何生成一个正则表达式,它将选择不包含此模式的所有行:
(.*:.*)

我是这样试的

^((?!(.*:.*)).)*$ 

从中,但我无法使其工作。

在我看来,您似乎正在尝试选择所有不包含
的行

为此,可以使用以下正则表达式:


^([^::]+)$

只需使用此模式,为全局设置选项
g
,为多行设置选项
m

^([^:]*)$
如果不想捕获空行(未指定),请将
*
更改为
+


Fiddle:

使用以下正则表达式:

^(?!(.*:.*)).*(\n|$)
?!(.*:.*)
是一种消极的前瞻,以确保前面没有模式匹配

这样一个包含零个或多个字符的行由下面的
*
匹配,它后面必须跟新行(\n)或字符串结尾($)。

我相信(.*:*)表示任何字符的0个或多个,后跟“:”,后跟任何字符的0个或多个。因此,以下内容将与之匹配

  • a:b
  • abc:def
  • :abc
  • abc:
  • :
基本上,如果我们将其分解,我们将查找任何不包含“:”字符的行。所以像这样的东西会有用的

^[^:]+$

我错过了新线谢谢你的回复。我想问一下,是否可以从一开始就删除所有带冒号的行,直到出现三行不带冒号的行?现在我有了正则表达式,它匹配带冒号的行和不带冒号的行,但不能组合在一起。就个人而言,我不会用正则表达式做这样的事情。该操作更适合于您使用的任何语言。在这一点上,阅读每一行,确定它是否有一个
,并相应地采取行动可能会更容易。一旦进入更复杂的find/replace/remove操作,Regex就变得不那么有用,使用起来也更复杂,因此通常建议只使用编写代码的任何父语言来完成工作,因为它通常效率更高,更容易阅读。值得注意的是,grep有一个标志
-v
,它可以反转结果,即显示所有与传入的模式不匹配的行。