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

 更新时间:2022年09月19日 09:35:23   作者:Star-King  
正则表达式中,\代表转义字符,通常是转义一些特殊字符,下面这篇文章主要给大家介绍了关于对Java正则表达式"\\"的相关理解,需要的朋友可以参考下

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

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

很多小伙伴就会产生疑问为什么语法是"\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正则表达式被解释两次。

总结

到此这篇关于对Java正则表达式"\\"理解的文章就介绍到这了,更多相关Java正则表达式"\\"内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Map.Entry的使用方法解析

    Java Map.Entry的使用方法解析

    这篇文章主要介绍了Java Map.Entry的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot整合mybatisplus和druid的示例详解

    SpringBoot整合mybatisplus和druid的示例详解

    这篇文章主要介绍了SpringBoot整合mybatisplus和druid的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Java实现AOP代理的三种方式详解

    Java实现AOP代理的三种方式详解

    AOP是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善。本文将用Java实现AOP代理的三种方式,需要的可以参考一下
    2022-07-07
  • Java中byte[]、String、Hex字符串等转换的方法

    Java中byte[]、String、Hex字符串等转换的方法

    这篇文章主要介绍了Java中byte[]、String、Hex字符串等转换的方法,代码很简单,需要的朋友可以参考下
    2018-05-05
  • jsp+servlet实现简单登录页面功能(附demo)

    jsp+servlet实现简单登录页面功能(附demo)

    本文主要介绍了jsp+servlet实现简单登录页面功能登录成功跳转新页面,登录失败在原登录界面提示登录失败信息,对初学者有一定的帮助,感兴趣的可以了解一下
    2021-07-07
  • Java实现的Windows资源管理器实例

    Java实现的Windows资源管理器实例

    这篇文章主要介绍了Java实现的Windows资源管理器,实例分析了基于java实现windows资源管理器的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 如何解决springboot数据库查询时出现的时区差异问题

    如何解决springboot数据库查询时出现的时区差异问题

    这篇文章主要介绍了如何解决springboot数据库查询时出现的时区差异问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Spring boot webService使用方法解析

    Spring boot webService使用方法解析

    这篇文章主要介绍了Spring boot webService使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 分析Netty直接内存原理及应用

    分析Netty直接内存原理及应用

    Netty作为一个流行的应用框架,它的强悍之处是性能强悍,可以轻松承载数万并发; 其编程模型简单,容易上手; 这就给大家打开了一扇通向高性能的大门。高效io模型略去不说,我们今天主要来看看内存控制这块的强大之处
    2021-06-06
  • mybatis typeAliases 给实体类起别名的方法

    mybatis typeAliases 给实体类起别名的方法

    这篇文章主要介绍了mybatis typeAliases 给实体类起别名,本文给大家分享两种用法,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论