RegExp匹配行不以at符号开头

时间:2016-02-10 10:58:31

标签: regex lookbehind negative-lookbehind

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

实施例: @test匹配&#34;测试&#34;,但不是&#34; @&#34;

我试图匹配线,它首先不是空格字符不是at符号。为此,我否定了后视,导致:(?<!^[\t ]*@).+

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

  • 你需要一个前瞻(紧随其后),而不是一个外观
  • 你需要在行的开头锚定你的模式

所以,如果你逐行阅读文本:

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

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

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

(或另一种打开此m修饰符的方法)