关于对Java正则表达式"\\\\"的理解
作者:Star-King 发布时间:2023-06-24 07:23:02
相信很多人在使用正则表达式的时候都会遇到如下的语句:
通过查阅正则表达式的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正则表达式被解释两次。
来源:https://blog.csdn.net/qq_48185833/article/details/122332848
猜你喜欢
- 一旦被黑客获取到webshell,黑客就知道了你的sqlserver管理员密码,如果sqlserver再没有经过安全设置那么黑客很容易就提权
- 用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般采集程序就几个文件,
- PDO::inTransactionPDO::inTransaction — 检查是否在一个事务内(PHP 5 >= 5.3.3, B
- 一个不错的绿色下划线的简洁CSS导航代码,纯css不用图片,效果图如下:<html> <head> <meta
- 初学者可以看看。在的img标签有两个属性分别为alt和title,对于很多初学者而言对这两个属性的正确使用都还抱有迷惑,当然这其中一部分原因
- 最近,我有机会研究对视觉设计作用的常见误解,这些误解仍然盛行于行政主管、产品主管,工程经理和市场专家中。设计团队成员如何说明这些认识是错误的
- 新浪天气预报代码,需要的朋友可以复制下面的代码到要显示的页面,新浪代码 :<IFRAME WIDTH='260
- 本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别。兼容 IE 和 FF 的
- 大家经常在网上登陆的时候经常会看到让你输入验证码,有的是文字的,有的呢是图片,比如chinaren.com校友录中留言的时候,我们就会看到数
- rs.open语句详细说明rs.Open [第一个参数],  
- Microsoft® SQL Server™ 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
- 代码如下: <!-- #include file="../conn.asp" --> <!-- #in
- 数据类型是所有开发语言的基础,JavaScript虽然是一个弱类型的脚本语言,但是在数据类型上也有很多讲究的,看了淘宝UED玉伯的一篇文章,
- ASP如何分两段读取数据库?中间插入广告。代码如下:<!--#include file="conn.asp"--&
- body {font-family: Arial, sans-serif; }这是我迄今
- 数据库在时回加for xml auto调用方法 SqlCommand SqlComm=
- linux平台及windows平台mysql重启方 * inux下重启MySQL的正确方法:1、通过rpm包安装的MySQLservice m
- 随着手机用户的不断增加,WAP站点如雨后春笋迅速的滋长开来,手机邮箱也不断的出现在人的眼前,笔者也曾经开发了一套手机邮箱的系统,但由于时间仓
- 购物车的设计目标 从程序员的观点来看,购物车是维护购物者商品选购、允许察看、允许修改的一个对象。购物车本身是一个非常简单的程序,但开发者要考
- 数据库技术是计算机科学中发展最快的领域之一,数据库的诞生和发展给计算机信息管理带来了一场巨大的革命。数据库的诞生和发展给计算机信息管理带来了