我厌倦了总是试图猜测,()[]{}|在使用许多正则表达式实现时是否应该转义’ ‘等特殊字符。
它与Python,sed,grep,awk,Perl,重命名,Apache,find等不同。是否有任何规则集可以告诉我何时以及何时不应该转义特殊字符?它是否取决于正则表达式类型,例如PCRE,POSIX或扩展正则表达式?
实际上,您必须转义哪些字符以及您必须避免转义哪些字符确实取决于您使用的正则表达式风格。
对于PCRE和大多数其他所谓的与Perl兼容的风味,请避免使用以下外部字符类:
.^$*+?()[{\|
以及这些内部字符类:
^-]\
对于POSIX扩展正则表达式(ERE),请转义以下外部字符类(与PCRE相同):
转义任何其他字符是POSIX ERE的错误。
在字符类中,反斜杠是POSIX正则表达式中的文字字符。您不能使用它来逃避任何事情。如果要包括字符类元字符作为文字,则必须使用“巧妙放置”。将^放置在字符类的开头以外的任何位置,将]放在开头,将-放置在字符类的开头或结尾,以从字面上匹配这些字符,例如:
[]^-]
在POSIX基本正则表达式(BRE)中,这些是元字符,您需要对其进行转义以隐藏其含义:
.^$*[\
在BRE中转义括号和大括号给了它们特殊的含义,即它们在ERE中未转义的版本。一些实现(例如GNU)在转义时还赋予其他字符特殊的含义,例如\?。和+。转义。^ $ *(){}以外的字符通常是BRE的错误。
\?
+
^ $ *(){}
在角色类中,BRE与ERE遵循相同的规则。
如果所有这些使您的头部旋转,请抓住RegexBuddy的副本。在“创建”选项卡上,单击“插入令牌”,然后单击“文字”。RegexBuddy将根据需要添加转义符。