正则表达式中需转义的元字符包括、^、$、.、[、]、(、)、{、}、+、*、?、|,须写成x形式;字符组内多数元字符无需转义,但[、]、、-、^(开头时)例外;编程语言中还需考虑字符串层面的双重转义。
正则表达式里,有些字符自带功能,比如 ^ 表示行首、$ 表示行尾、* 表示重复零次或多次。如果想匹配这些字符本身(比如查找文本里的 * 号),就得用反斜杠 把它们“关掉”特殊含义——这就是转义。
哪些字符必须加反斜杠才能字面匹配
以下字符在正则中默认有特殊作用,要当普通符号用,必须写成 x 形式:
- (反斜杠自己)→ 写成 \
- ^ → ^(注意:在 [^abc] 这类字符组开头时,^ 是取反含义,不需转义;但单独出现或在字符组非开头位置,就要转义)
- $ → $
- . → .(小数点默认匹配任意非换行符)
- [ 和 ] → [ 和 ](中括号定义字符集,不转义会破坏结构)
- ( 和 ) → ( 和 )(用于分组捕获)
- { 和 } → { 和 }(用于量词限定,如 a{2,5})
- +、*、? → +、*、?(都是重复或可选操作符)
- | → |(表示“或”关系)
字符组内部的例外情况
在方括号 [...] 里,大部分元字符失去特殊性,无需转义:
- [a^b] 能直接匹配字符 a、^ 或 b,这里的 ^ 不是取反,不用写成 ^
- [a.b] 中的 . 就是字面小数点,不是通配符
- [a*+?] 中的 *、+、? 都按原样处理
- 但 [、]、、-(若不在开头或结尾)、^(仅当在开头时表取反)仍需小心:例如 [a-z] 才能安全匹配连字符
编程语言层面的双重转义
用字符串构造正则(比如 new RegExp("...") 或 Python 的 re.compile("..."))时,字符串本身也解析反斜杠:
- JavaScript 中:new RegExp("\.") 才等价于字面正则 .(因为字符串先吃掉一个 ,剩下一个给正则引擎)
- Python 推荐用原始字符串:r"." 避免被字符串误处理
- 错误写法示例:"." 在普通字符串里会被当成 .(因为 . 不是合法转义,部分语言静默忽略反斜杠)
更安全的替代写法:字符组包裹
不想记哪些要转义?把单个特殊字符放进方括号里,既直观又省心:
- 匹配 $:用 [$] 代替 $
- 匹配 +:用 [+] 代替 +
- 匹配多个不同符号,比如 . * ?:写成 [.*?] 即可
- 注意:[^] 不合法,[.] 比 . 稍冗余但完全等效











