为什么java正则表达式中匹配一个反斜杠要用四个反斜杠?

根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。

先由java解释器解释字符串,然后再由正则表达式解释器解释正则表达式

String pattern = "a\\\\b";

首先被java解释器解释为“a\b”(第一个和第三个\代表转义,此时正则表达式受到保护,不被解释),再被正则解释器解释为"a\b"。即java中由4个\表示一个\。也就是他文中所说的java正则表达式被解释两次。

其他语言应该是a\\b,这里使用两个反斜线,表示正则表达式受到保护这句话没有看懂,我的疑问在这里。

阅读 3.8k
3 个回答

java字符串表达式中,\是特殊字符,要输出则需要"\\"来表示

正则里如果需要匹配\,不考虑字符串因素,同样因为其也是正则里的特殊字符,需要\\来表示,

因此java里要用字符串表示正则里的一个反斜杠则需要四个反斜杠 "\\\\" 来表示正则里的\\

\有特殊的用途: 转义字符, 需要匹配\, 就需要对其进行转义就是\\就相当于一个\, 因此\b要写为\\b, 这个是java的特殊的一点, 他的规则就是这样. 其他的语言比如JS 就不需要这样,详细可以参考我的这篇文章:
Java 的正则表达式与爬虫

正则表达式的斜杠需要用 \\ 来表示。但正则表达式是通过字符串来生成的,字符表示一个斜杠需要 \\,那么表示 \\ 需要用 \\\\

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题