如果我编写这个正则表达式 (?<=^[\t ]*@).+ 我只能匹配以可选空格开头的行(但不能匹配换行符)和at符号,而不能匹配at符号。
(?<=^[\t ]*@).+
例子: @test 匹配“test”,但不匹配“@”。
@test
我试图匹配首先不是空格字符而不是at符号的行。为此,我否定了后面的看法,结果是: (?<!^[\t ]*@).+ .
(?<!^[\t ]*@).+
但它匹配行,即使它们的第一个非空格字符是at符号。
我尝试过这样的正则表达式: ^[\t ]*[^@].* , (?<=^[\t ]*[^@]).+ , (?<=^[\t ]*)(.(?!@)).* . 所有这些匹配行,即使它们的第一个非空格字符是at符号。
^[\t ]*[^@].*
(?<=^[\t ]*[^@]).+
(?<=^[\t ]*)(.(?!@)).*
如何匹配不以可选空格(不是换行符)开头的行和at符号?
matches matches m@tches m@tches @Doesn't match @Doesn't match
谢谢
你的模式很好,除了两件事:
因此,如果您逐行阅读文本:
^(?![ \t]*@).+
如果阅读全文,则需要使用多行修饰符 ^ 要匹配行的开头(默认情况下不是字符串的开头):
^
(?m)^(?![ \t]*@).+
(或打开此m修饰符的其他方式)