2024-04-19 23:21:35 发布
网友
我厌倦了在使用许多regexp实现时,总是试图猜测是否应该转义诸如()[]{}|等特殊字符。
()[]{}|
它不同于Python、sed、grep、awk、Perl、rename、Apache、find等等。 有什么规则集告诉我什么时候应该,什么时候不应该,转义特殊字符吗?它是否依赖于regexp类型,如PCRE、POSIX或扩展regexps?
不幸的是,实际上并没有一组转义代码,因为它根据您使用的语言而有所不同。
然而,保持像Regular Expression Tools Page或这个Regular Expression Cheatsheet这样的页面可以帮助您快速过滤出问题。
< SUP>包括C、C++、Delphi、EdjPad、java、JavaScript、Perl、PHP(PREG)、PostgreSQL、PowerGREP、POWECK、Python、REALbasic、Real RealStudio、Ruby、TCL、VB.NET、VBScript、WxWIDGet、XML Schema、Xojo、XRegExp。
任何位置:. ^ $ * + - ? ( ) [ ] { } \ |
. ^ $ * + - ? ( ) [ ] { } \ |
包括awk、ed、egrep、emacs、GNUlib、grep、PHP(ereg)、MySQL、Oracle、R、sed。PCRE支持可以在以后的版本中启用,也可以通过使用扩展来启用
ERE/awk/egrep/emacs
在字符类之外:. ^ $ * + ? ( ) [ { } \ | 在字符类中:^ - [ ]
. ^ $ * + ? ( ) [ { } \ |
^ - [ ]
BRE/ed/grep/sed
在字符类之外:. ^ $ * [ \ 在字符类中:^ - [ ] 对于文本,不要转义:+ ? ( ) { } | 对于标准正则表达式行为,escape:\+ \? \( \) \{ \} \|
. ^ $ * [ \
+ ? ( ) { } |
\+ \? \( \) \{ \} \|
\xFF
] -
"(\")(/)(\\.)"
/(")(\/)(\.)/
哪些字符是必须的,哪些字符不能转义取决于使用的regex类型。
对于PCRE和大多数其他所谓的Perl兼容类型,请转义这些外部字符类:
.^$*+?()[{\|
这些内部字符类:
^-]\
对于POSIX扩展正则表达式(ERE),转义这些外部字符类(与PCRE相同):
转义任何其他字符是POSIX ERE的一个错误。
在字符类中,反斜杠是POSIX正则表达式中的文字字符。你不能用它来逃避任何事情。如果要将字符类元字符包含为文本,则必须使用“巧妙的位置”。将“^”放在字符类开头以外的任何地方,将“]放在开头,将“-”放在字符类的开头或结尾,以便按字面意思匹配这些字符,例如:
[]^-]
在POSIX基本正则表达式(BRE)中,这些元字符需要转义以抑制其含义:
.^$*[\
BREs中的转义括号和花括号赋予了它们在EREs中的特殊含义。一些实现(例如GNU)在转义时也给其他字符赋予了特殊的含义,例如?和+。转义.^$*({})以外的字符通常是BREs的错误。
在字符类中,BREs遵循与EREs相同的规则。
如果这一切让你头晕目眩,拿一份RegexBuddy。在“创建”选项卡上,单击“插入标记”,然后单击“文字”。RegexBuddy将根据需要添加转义。
不幸的是,实际上并没有一组转义代码,因为它根据您使用的语言而有所不同。
然而,保持像Regular Expression Tools Page或这个Regular Expression Cheatsheet这样的页面可以帮助您快速过滤出问题。
现代RegEx香精(PCRE)
< SUP>包括C、C++、Delphi、EdjPad、java、JavaScript、Perl、PHP(PREG)、PostgreSQL、PowerGREP、POWECK、Python、REALbasic、Real RealStudio、Ruby、TCL、VB.NET、VBScript、WxWIDGet、XML Schema、Xojo、XRegExp。
任何位置:
. ^ $ * + - ? ( ) [ ] { } \ |
传统RegEx口味(BRE/ERE)
包括awk、ed、egrep、emacs、GNUlib、grep、PHP(ereg)、MySQL、Oracle、R、sed。
PCRE支持可以在以后的版本中启用,也可以通过使用扩展来启用
ERE/awk/egrep/emacs
在字符类之外:
. ^ $ * + ? ( ) [ { } \ |
在字符类中:
^ - [ ]
BRE/ed/grep/sed
在字符类之外:
. ^ $ * [ \
在字符类中:
^ - [ ]
对于文本,不要转义:
+ ? ( ) { } |
对于标准正则表达式行为,escape:
\+ \? \( \) \{ \} \|
注释
\xFF
那样对其进行转义] -
只需要在字符类中转义,但为了简单起见,我将它们保存在一个列表中"(\")(/)(\\.)"
与/(")(\/)(\.)/
)哪些字符是必须的,哪些字符不能转义取决于使用的regex类型。
对于PCRE和大多数其他所谓的Perl兼容类型,请转义这些外部字符类:
这些内部字符类:
对于POSIX扩展正则表达式(ERE),转义这些外部字符类(与PCRE相同):
转义任何其他字符是POSIX ERE的一个错误。
在字符类中,反斜杠是POSIX正则表达式中的文字字符。你不能用它来逃避任何事情。如果要将字符类元字符包含为文本,则必须使用“巧妙的位置”。将“^”放在字符类开头以外的任何地方,将“]放在开头,将“-”放在字符类的开头或结尾,以便按字面意思匹配这些字符,例如:
在POSIX基本正则表达式(BRE)中,这些元字符需要转义以抑制其含义:
BREs中的转义括号和花括号赋予了它们在EREs中的特殊含义。一些实现(例如GNU)在转义时也给其他字符赋予了特殊的含义,例如?和+。转义.^$*({})以外的字符通常是BREs的错误。
在字符类中,BREs遵循与EREs相同的规则。
如果这一切让你头晕目眩,拿一份RegexBuddy。在“创建”选项卡上,单击“插入标记”,然后单击“文字”。RegexBuddy将根据需要添加转义。
相关问题 更多 >
编程相关推荐