0

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

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

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

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

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

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

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

谢谢!

4

1 回答 1

1

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

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

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

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

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

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

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

于 2016-02-10T11:11:08.060 回答