正则表达式匹配行不以符号开头

RegExp match lines NOT starting with at-symbol

如果我写这个正则表达式 (?<=^[\t ]*@).+ 我只能匹配以可选的 spaces(但不是换行符)和 at 符号开头的行,而不匹配 at 符号。

示例: @test 匹配 "test",但不匹配“@”。

我正在尝试匹配首先不是 space 字符不是 at 符号的行。为此,我否定了后视,结果是:(?<!^[\t ]*@).+.

但它匹配行,即使它们的第一个非space字符是 at 符号。

我试过像这样的正则表达式: ^[\t ]*[^@].*, (?<=^[\t ]*[^@]).+, (?<=^[\t ]*)(.(?!@)).*。 所有 then 匹配行,即使它们的第一个非 space 字符是 at 符号。

如何匹配不以可选 spaces(不是换行符)和 at 符号开头的行?

matches
    matches
m@tches
    m@tches
@Doesn't match
    @Doesn't match

谢谢!

你的模式很好,除了两点:

  • 你需要先行(后跟),而不是后行
  • 您需要在行首锚定您的模式

因此,如果您逐行阅读文本:

^(?![ \t]*@).+

如果您阅读整篇文本,您需要使用多行修饰符使 ^ 匹配行的开头(默认情况下不是字符串的开头):

(?m)^(?![ \t]*@).+

(或打开此 m 修饰符的其他方式)