为什么“java正则表达式中匹配一个反斜杠要用四个反斜杠”,java正则表达式为啥用两个\\表示一个\

为什么“java正则表达式中匹配一个\要用\\\\


首先我们知道在正则表达式中\代表转义,而java中\也代表转义(一些字母前加\来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符 1)。

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

根据“thinking中的一段话:如果在其他语言中使用过正则表达式,那你就立刻能发现Java对反斜线\的不同处理.在其他语言中,\表示"我想要在正则表达式中插入一个普通的(字面上的)反斜线,请不要给他任何特殊的意义."而在Java中,\的意思是"我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义."例如,如果你想表示一位数字,那么正则表达式应该是\d.如果你想插入一个普通的反斜线,则应该这样用\\.不过换行和制表符之类的东西只需使用单反斜线:\n\t. ”2

也就是java解释字符串时,正则表达式受到保护(可以这样理解:先由java解释器解释字符串,然后再由正则表达式解释器解释正则表达式),

那么

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

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

其他java正则表达式用法请见Java 正则表达式


  1. https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6/86397?fr=aladdin ↩︎

  2. https://ask.csdn.net/questions/258144 ↩︎ ↩︎

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值