正则表达式中必须转义哪些特殊字符?

我厌倦了总是试图猜测,在使用许多regexp实现时,我是否应该转义特殊字符,如“()[]{}}”等

它与Python、sed、grep、awk、Perl、rename、Apache、find等不同。
是否有任何规则集告诉我什么时候应该和什么时候不应该转义特殊字符?它是否依赖于regexp类型,如PCRE、POSIX或扩展regexp

哪些字符必须转义,哪些不能转义,这取决于您使用的正则表达式的风格

对于PCRE和大多数其他所谓的Perl兼容风格,转义这些外部字符类:

^$*+?()[{\|

还有这些内部字符类:

^-]\

对于POSIX扩展正则表达式(ERE),转义这些外部字符类(与PCRE相同):

^$*+?()[{\|

转义任何其他字符是POSIX ERE的错误

在字符类中,反斜杠是POSIX正则表达式中的文字字符。不能使用它转义任何内容。如果要将字符类元字符包括为文字,则必须使用“巧妙放置”。将^在字符类的开始处,以及-在字符类的开始或结束处,以逐字匹配这些字符,例如:

[]^-]

在POSIX基本正则表达式(BRE)中,这些是需要转义以抑制其含义的元字符:

^$*[\

BRE中的转义括号和花括号赋予它们在ERE中未转义版本的特殊含义。某些实现(例如GNU)在转义时也赋予其他字符特殊含义,例如\?和+。转义除.^$*(){}以外的字符通常是BRE的错误

在字符类中,BRE遵循与ERE相同的规则

如果所有这些都让你头晕目眩,那么抓取一份RegexBuddy的副本。在“创建”选项卡上,单击“插入令牌”,然后单击“文字”。RegexBuddy将根据需要添加转义

发表评论