正则表达式需要转义的字符

5 阅读1分钟

在 Java 的 String.split() 方法中,参数是一个正则表达式。因此,所有在正则表达式中有特殊含义的字符都需要转义。

需要转义的特殊字符

. ^ $ * + ? | { } [ ] ( ) \

这些字符在正则表达式中都有特殊含义,如果作为普通分隔符使用,必须用 \\ 进行转义。

常见分隔符示例

你想按什么分割错误写法正确写法
点号 .split(".")split("\\.")
竖线 |split("|")split("\\|")
星号 *split("*")split("\\*")
加号 +split("+")split("\\+")
问号 ?split("?")split("\\?")
左括号 (split("(")split("\\(")
右括号 )split(")")split("\\)")
左方括号 [split("[")split("\\[")
右方括号 ]split("]")split("\\]")
左花括号 {split("{")split("\\{")
右花括号 }split("}")split("\\}")
脱字符 ^split("^")split("\\^")
美元符 $split("$")split("\\$")
反斜杠 \split("\\")split("\\\\")

反斜杠的特殊说明

要按反斜杠 \ 分割,需要写 split("\\\\")

  • 第一个 \\ 表示一个反斜杠字符(Java 字符串转义)
  • 第二个 \\ 表示正则表达式中的反斜杠转义
  • 总共 4 个反斜杠才能匹配一个 \

替代方案(推荐)

如果你只是按普通字符串分割,不想关心正则表达式,可以用 Pattern.quote()

String[] parts = version1.split(Pattern.quote("."));

这样 . 会被当作普通字符处理,不需要手动转义。

快速记忆

  • 字母和数字:不需要转义
  • 其他符号:如果不确定,就用 Pattern.quote() 包起来