什么特殊字符必须在正则表达式中转义?
我厌倦了总是试图猜测,如果我应该逃避像' ()[]{}|
这样的特殊字符 '等使用正则表达式的许多实现。
例如,它与Python,sed,grep,awk,Perl,rename,Apache,find等不同。 有什么规则可以告诉我应该什么时候,什么时候不应该逃脱特殊字符? 它是否依赖于正则表达式类型,如PCRE,POSIX或扩展正则表达式?
您必须拥有哪些角色以及哪些角色不能逃脱,这取决于您正在使用的正则表达式风格。
对于PCRE以及大多数其他所谓的Perl兼容风格,请转义这些外部字符类:
.^$*+?()[{|
和这些内部字符类:
^-]
对于POSIX扩展正则表达式(ERE),转义这些外部字符类(与PCRE相同):
.^$*+?()[{|
转义任何其他字符是POSIX ERE的错误。
在字符类内部,反斜杠是POSIX正则表达式中的文字字符。 你不能用它来逃避任何事情。 如果要将字符类元字符包含为文字,则必须使用“巧妙放置”。 把^放在开头的任意位置,]在开始处,以及 - 在字符类的开始或结尾与字面匹配,例如:
[]^-]
在POSIX基本正则表达式(BRE)中,这些元字符是您需要转义才能抑制其含义的元字符:
.^$*
在BRE中转义括号和大括号赋予它们它们未转义版本在ERE中具有的特殊含义。 一些实现(例如GNU)在转义时还会为其他字符赋予特殊含义,例如? 和+。 转义除。^ $ *(){}以外的字符通常是BRE错误。
在字符类内部,BRE遵循与ERE相同的规则。
如果所有这些都让你头晕目眩,那就拿一份RegexBuddy吧。 在创建选项卡上,单击插入令牌,然后单击文字。 RegexBuddy会根据需要添加转义。
现代RegEx香料(PCRE)
包括C,C ++,Delphi,EditPad,Java,JavaScript,Perl,PHP(preg),PostgreSQL,PowerGREP,PowerShell,Python,REALbasic,Real Studio,Ruby,TCL,VB.Net,VBScript,wxWidgets,XML Schema,Xojo, XRegExp。
PCRE兼容性可能有所不同
任何地方: . ^ $ * + - ? ( ) [ ] { } |
. ^ $ * + - ? ( ) [ ] { } |
传统RegEx香料(BRE / ERE)
包括awk,ed,egrep,emacs,GNUlib,grep,PHP(ereg),MySQL,Oracle,R,sed。
PCRE支持可能在更高版本中或通过使用扩展启用
ERE / AWK / egrep的/ emacs的
在角色等级之外: . ^ $ * + ? ( ) [ { } |
. ^ $ * + ? ( ) [ { } |
在字符类中: ^ - [ ]
BRE / ED / grep的/ SED
在角色等级之外: . ^ $ * [
. ^ $ * [
在字符类中: ^ - [ ]
对于文字,不要逃避: + ? ( ) { } |
+ ? ( ) { } |
对于标准的正则表达式行为,转义: + ? ( ) { } |
+ ? ( ) { } |
笔记
xFF
一样转义 ] -
只需要在字符类中转义,但为了简单起见,我将它们保存在一个列表中 "(")(/)(.)"
与/(")(/)(.)/
in JavaScript的) 不幸的是,实际上没有一组转义码,因为它根据您使用的语言而有所不同。
但是,保留一个像正则表达式工具页面或这个正则表达式Cheatsheet的页面可以帮助您快速过滤出来。
链接地址: http://www.djcxy.com/p/95197.html上一篇: What special characters must be escaped in regular expressions?