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

标签 regex

我厌倦了在使用正则表达式的许多实现时总是试图猜测是否应该转义“()[]{}|”等特殊字符。

与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 - 正则表达式中哪些特殊字符必须转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/399078/

相关文章:

php - 复制 preg 替换为 javascript

java - 使用系统文件分隔符拆分文件名

regex - 如何提取正则表达式注释

javascript - 正则表达式替换和追加字符串

JavaScript 正则表达式 : Number of trailing newlines in a string

regex - .htaccess 重定向模式

正则表达式检查文件是否有任何扩展名

python - 在 pandas.DataFrame.str.replace 中组合多个正则表达式?

regex - Perl 条件正则表达式提取

php - 整理元素时出错 整理元素后不支持正则表达式