我有以下正则表达式来消除空格,制表符和新行: [^ \n\t]
但是,我想为某些其他字符扩展它,例如>和<.
我尝试过[^ \n\t<>],现在效果很好,但我希望表达式不匹配,如果<或>前面有一个\.
我试过了[^ \n\t[^\\]<[^\\]>],但这没用.
您的输入中是否可以出现以下任一序列?
\\>
\\\>
\\\\>
\blank
\tab
\newline
...
如果是这样,您建议如何对待他们?
如果没有,那么零宽度后向断言就可以解决问题,前提是您的正则表达式引擎支持它。在任何支持 Perl 风格的正则表达式(包括 Perl、PHP 等)的引擎中都会出现这种情况:
(?<!\\)[ \n\t<>]
Run Code Online (Sandbox Code Playgroud)
上面的内容将匹配任何未转义的空格、换行符、制表符或尖括号。更一般地(用于\s表示任何空格字符,包括\r):
(?<!\\)\s
Run Code Online (Sandbox Code Playgroud)
或者,使用补充符号而不需要零宽度后向断言(但可以说效率较低):
(?:[^ \n\t<>]|\\[<>])
Run Code Online (Sandbox Code Playgroud)
您还可以使用后者的变体来处理\\>、\\\>等\\\\>情况以及最多有限数量的前置反斜杠,例如:
(?:[^ \n\t<>]|(?:^|[^<>])[\\]{1,3,5,7,9}[<>])
Run Code Online (Sandbox Code Playgroud)