需要转义哪些字符
字符转义允许在输入字符串中逐字搜索并找到某些字符(由正则表达式引擎保留用于操作搜索)。转义取决于上下文,因此此示例不包括字符串或分隔符转义。
反斜杠
说反斜杠是转义字符有点误导。反斜杠转义和反斜杠带来; 它实际上会打开或关闭元字符与前面字符的字面状态。
为了在正则表达式中的任何地方使用字面反斜杠,它必须通过另一个反斜杠进行转义。
转义(外部角色类)
有几个字符需要转义才能按字面意思(至少在 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 引擎支持它们作为元字符,则它们必须作为\?
和\+
进行转义。