需要转义哪些字符
字符转义允许在输入字符串中逐字搜索并找到某些字符(由正则表达式引擎保留用于操作搜索)。转义取决于上下文,因此此示例不包括字符串或分隔符转义。
反斜杠
说反斜杠是转义字符有点误导。反斜杠转义和反斜杠带来; 它实际上会打开或关闭元字符与前面字符的字面状态。
为了在正则表达式中的任何地方使用字面反斜杠,它必须通过另一个反斜杠进行转义。
转义(外部角色类)
有几个字符需要转义才能按字面意思(至少在 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}。要匹配a或aa,请使用a\{1,2\}
括号 ()
(ab)\1无效,因为没有捕获组 1.要修复它并匹配abab使用\(ab\)\1
反斜杠
- 在 char 类中(在 POSIX 中称为括号表达式),反斜杠不是元字符(并且不需要转义)。
[\d]匹配\或d。 - 在其他地方,像往常一样转义。
其他
+和?是文字。如果 BRE 引擎支持它们作为元字符,则它们必须作为\?和\+进行转义。