当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《必须在正则表达式中转义哪些特殊字符?》经验,为你挑选了4个好方法。

我厌倦了总是试图猜测,如果我()[]{}|在使用许多regexp实现时应该逃避像'等等特殊字符.

它与例如Python,sed,grep,awk,Perl,rename,Apache,find等不同.是否有任何规则集告诉我何时应该,何时不应该逃避特殊字符?它是否依赖于正则表达式类型,如PCRE,POSIX或扩展正则表达式?



1> Jan Goyvaert..:

您必须使用哪些角色以及哪些角色确实无法逃脱取决于您正在使用的正则表达式.

对于PCRE以及大多数其他所谓的Perl兼容版本,请忽略这些外部字符类:

.^$*+?()[{\|

以及这些内部角色类:

^-]\

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

.^$*+?()[{\|

使用POSIX ERE时,转义任何其他字符都是错误的.

在字符类内部,反斜杠是POSIX正则表达式中的文字字符.你不能用它来逃避任何事情.如果要将字符类元字符包含为文字,则必须使用"巧妙放置".将^除了在开头处,在开头处,以及 - 在字符类的开头或结尾处 - 在字面上匹配这些,例如:

[]^-]

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

.^$*[\

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

在内部角色类中,BRE遵循与ERE相同的规则.

如果这一切让你头晕目眩,那就抓住RegexBuddy的副本吧.在"创建"选项卡上,单击"插入标记",然后单击"文字".RegexBuddy将根据需要添加转义.


`/`不是我提到的任何正则表达式中的元字符,因此正则表达式语法不需要转义它.当正则表达式在编程语言中被引用为文字时,那么该语言的字符串或正则表达式格式规则可能需要转义`/`或```或```,甚至可能需要`\\`被双重逃脱.
可能被转义与应该被转义的不一样.PCRE语法永远不需要转义文字冒号,因此转义文字冒号只会使你的正则表达式难以阅读.
结肠怎么样,":"?它应该在角色类内外逃脱吗?http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions说"PCRE具有一致的转义规则:任何非字母数字字符都可以转义为其字面值[...]"

2> Beejor..:

现代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兼容性可能有所不同

    任何地方: . ^ $ * + - ? ( ) [ ] { } \ |


Legacy RegEx Flavors(BRE/ERE)

包括awk,ed,egrep,emacs,GNUlib,grep,PHP(ereg),MySQL,Oracle,R,sed.
可以在更高版本中或通过使用扩展来启用PCRE支持

ERE/AWK/egrep的/ emacs的

    在角色类之外:. ^ $ * + ? ( ) [ { } \ |
    在角色类中:^ - [ ]

BRE/ED/grep的/ SED

    在字符类之外:. ^ $ * [ \
    在字符类中:^ - [ ]
    对于文字,不要转义:+ ? ( ) { } |
    对于标准正则表达式行为,转义:\+ \? \( \) \{ \} \|


笔记

如果不确定某个特定字符,可以将其转义为 \xFF

无法使用反斜杠转义字母数字字符

可以使用PCRE中的反斜杠转义任意符号,但不能转义BRE/ERE(必须在必要时转义它们).对于PCRE,] -只需要在字符类中进行转义,但为了简单起见,我将它们保存在单个列表中

引用的表达式字符串也必须包含转义的周围引号字符,并且通常使用反斜杠加倍("(\")(/)(\\.)"/(")(\/)(\.)/JavaScript 相比)

除了转义之外,不同的正则表达式实现可以支持不同的修饰符,字符类,锚点,量词和其他功能.有关详细信息,请regular-expressions.info,或使用regex101.com来测试你的表情生活



3> Dillie-O..:

遗憾的是,实际上没有一组转义码,因为它根据您使用的语言而有所不同.

但是,保留像正则表达式工具页面或此正则表达式备忘单这样的页面可以帮助您快速筛选出来.



4> Jonathan Lef..:

POSIX可以识别正则表达式的多种变体-基本正则表达式(BRE)和扩展正则表达式(ERE)。即便如此,由于POSIX标准化实用程序的历史实现,仍然存在一些奇怪之处。

对于何时使用哪种表示法,甚至给定命令使用哪种表示法,没有一个简单的规则。

查阅Jeff Friedl的《精通正则表达式》一书。

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有