关于对Java正则表达式"\\\\"的理解

作者:Star-King 时间:2023-06-24 07:23:02 

相信很多人在使用正则表达式的时候都会遇到如下的语句:

关于对Java正则表达式"\\\\"的理解

关于对Java正则表达式"\\\\"的理解

关于对Java正则表达式"\\\\"的理解

通过查阅正则表达式的API文档可以了解到正则表达式的语法知识:

关于对Java正则表达式"\\\\"的理解

很多小伙伴就会产生疑问为什么语法是"\d"(或是"\D"、"\w"),为什么在语句中使用的时候就变成了"\\"   ??????

下面以"\\d"为例:

理解一:

这要分两步看

①.首先字符串中的\\被编译器解释为\    ------>    第一步,编译器将字符串转变为“正则表达式”

②.然后作为正则表达式,\d又被正则表达式引擎解释为“数字[0--9]"    ------> 第二步,才开始把第一步的结果当做是正则表达式,开始进行匹配!

理解二:

这个是由两部分组成的   \ 转义符 +  \d 是一个正则表达式。标识所有数字及0-9

之所以要加\是因为在JAVA中一些特殊的符号(回车)是没有符号代表的。所以需要转义符这个概念。而像回车这类转义符都是由\开始的。那么就出现了第二个问题,如果我要输入的恰恰是\符号怎么办?那么这个问题就还用转义符来解决。即为转义字符的再转义,就可以让编译器识别到我们输入的并不是一个特殊字符,而是一个表示特定含义的正则表达式"\d"。

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

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

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

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

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

那么

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

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

来源:https://blog.csdn.net/qq_48185833/article/details/122332848

标签:java,正则表达式,\\
0
投稿

猜你喜欢

  • Javascript闭包的作用与使用方法浅析

    2024-04-10 16:12:11
  • Python实现的企业粉丝抽奖功能示例

    2023-10-05 13:57:43
  • MySQL慢查日志的开启方式与存储格式详析

    2024-01-12 14:21:47
  • 详解Python的Django框架中的Cookie相关处理

    2022-07-05 00:13:53
  • python人工智能tensorflow常见损失函数LOSS汇总

    2023-11-22 18:12:48
  • Python开发之QT解决无边框界面拖动卡屏问题(附带源码)

    2023-10-31 09:31:29
  • asp如何对欲删除的记录确认后再删除?

    2009-11-20 18:48:00
  • Python中POST调用Restful接口示例

    2021-03-14 19:42:19
  • 数据库性能测试之sysbench工具的安装与用法详解

    2024-01-18 15:20:34
  • MySQL高效导入多个.sql文件方法详解

    2024-01-20 19:10:44
  • 详谈mysqldump数据导出的问题

    2024-01-21 19:35:29
  • 使用Python制作一个简易的远控终端

    2022-03-29 21:04:12
  • Python和perl实现批量对目录下电子书文件重命名的代码分享

    2022-01-28 02:51:48
  • DenseNet121模型实现26个英文字母识别任务

    2023-08-22 13:15:22
  • 整理一个asp多级树型分类问题的解决方法

    2007-10-17 18:38:00
  • Python深度强化学习之DQN算法原理详解

    2023-03-05 12:02:51
  • Python实现给文件添加内容及得到文件信息的方法

    2022-01-04 09:22:20
  • python中计算一个列表中连续相同的元素个数方法

    2021-02-04 22:59:23
  • tensorflow-gpu安装的常见问题及解决方案

    2021-08-18 11:31:18
  • 关于textarea的直观换行

    2010-03-18 15:59:00
  • asp之家 网络编程 m.aspxhome.com