代码之家  ›  专栏  ›  技术社区  ›  Oliver Tarrago

RegExp匹配线不以符号[重复]开头

  •  0
  • Oliver Tarrago  · 技术社区  · 8 年前

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

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

    我试图匹配首先不是空格字符而不是at符号的行。为此,我否定了后面的看法,结果是: (?<!^[\t ]*@).+ .

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

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

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

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

    谢谢

    1 回复  |  直到 8 年前
        1
  •  1
  •   Casimir et Hippolyte    8 年前

    你的模式很好,除了两件事:

    • 你需要一个前瞻 (后跟) ,而不是回头看
    • 你需要把你的模式固定在线条的开头

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

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

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

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

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