需要转义哪些字符

字符转义允许在输入字符串中逐字搜索并找到某些字符(由正则表达式引擎保留用于操作搜索)。转义取决于上下文,因此此示例不包括字符串分隔符转义。

反斜杠

说反斜杠是转义字符有点误导。反斜杠转义和反斜杠带来; 它实际上会打开或关闭元字符与前面字符的字面状态。

为了在正则表达式中的任何地方使用字面反斜杠,它必须通过另一个反斜杠进行转义。

转义(外部角色类)

有几个字符需要转义才能按字面意思(至少在 char 类之外):

  • 括号:[]
  • 括号:()
  • 卷曲括号:{}
  • 经营者:*+?|
  • 主播:^$
  • 其他:.\
  • 为了在开头使用文字^或在正则表达式结尾使用文字 $,必须转义该字符。
  • 有些风味只在分别位于正则表达式的开头或结尾时才使用^$ 作为元字符。在这些口味中,不需要额外的转义。无论如何,通常最好转义它们。

在字符类中转义

  • 当它们在 char 类中作为文字出现时,最好使用方括号([])。在某些条件下,根据风味的不同 ,它不是必需的 ,但它会损害可读性。
  • 插入符号^是一个元字符,当作为 char 类中的第一个字符时:[^aeiou]。char 类中的任何其他位置,它只是一个字面字符。
  • 破折号 - 是一个元字符,除非它位于字符类的开头或结尾。如果 char 类中的第一个字符是插入符号^,那么如果它是 char 类中的第二个字符,它将是一个文字。

转义更换

在替换内也有转义规则,但上述规则均不适用。唯一的元字符是 $\,至少当 $ 可用于引用捕获组时(如第 1 组的 $1)。要使用文字 $,请转义它:\$5.00。同样\C:\\Program Files\\

BRE 例外

虽然 ERE(扩展正则表达式)反映了典型的 Perl 风格语法,但 BRE(基本正则表达式)在转义时有很大差异:

  • 有不同的简写语法。所有的\d\s\w 等都消失了。相反,它有自己的语法(POSIX 令人困惑地称之为字符类),如 [:digit:]。这些结构必须在字符类中。
  • 可以正常使用的元字符(.*^$)很少。所有其他元字符必须以不同方式进行转义:

大括号 {}

  • a{1,2} 匹配 a{1,2}。要匹配 aaa,请使用 a\{1,2\}

括号 ()

  • (ab)\1 无效,因为没有捕获组 1.要修复它并匹配 abab 使用\(ab\)\1

反斜杠

  • 在 char 类中(在 POSIX 中称为括号表达式),反斜杠不是元字符(并且不需要转义)。[\d] 匹配\d
  • 在其他地方,像往常一样转义。

其他

  • +? 是文字。如果 BRE 引擎支持它们作为元字符,则它们必须作为\?\+进行转义。