正则表达式实例解读

文章目录

  • 正则式 a?
  • 正则式 ^\w+\d
  • 正则式 (\d){4}|\1{2}
  • 正则式 \d{4}|\d{2}

正则式 a?

正则式:a?
被匹配的字符串:a<>aava</>ab
看下面的 Java 代码:

String test = "a<>aava</>abb";
String reg = "a?";
System.out.println(test.replaceAll(reg, "#"));

输出的结果是:

##<#>###v##<#/#>##b#b#

解读下匹配过程:
正则式 a?,是表示匹配一个 a 或者 0 个 a, 没有 a 也算匹配成功。首先匹配 a<>aava</>abb 的字符“a”,整个正则式匹配成功第 1 次,替换成 #,接着匹配第 2 个字符“<”,不是字符“a”,匹配字符失败,而正则式可以匹配 0 个 a,所以会匹配字符“<”前面的位置,所以整个正则式匹配成功第 2 次(即第 2 次迭代匹配成功),我晕这样也行!所以在字符“<” 前再插入第 2 个 #,后面也是依照这样奇葩的逻辑去匹配替换。

正则式 ^\w+\d

正则式:^\w+\d
被匹配的字符串:1a2b2c2de

String test = "1a2b2c2de";
String test1 = "%1a2b2c2de"
String reg = "^\\w+\\d"; // 在 Java中,正则表达式引擎认为 \ 是普通的字符,\\ 才是转义符号
System.out.println("结果1:"+test.replaceAll(reg, "#"));
System.out.println("结果2:"+test1.replaceAll(reg, "#"));

输出结果:

结果1:#de
结果2%1a2b2c2de

匹配过程解读:

^ 是一个虚拟的概念,表示字符串第 1 个字符的前面,字符串第 1 个字符前面有东西吗?没有吧,所以是一个虚拟的概念。而这个 ^ 字符告诉了正则表达式引擎要查找紧跟在头部后面且符合正则式的字符串。

在这里插入图片描述

我们看到 ^ 后面跟着 \w+,而 \w 表示英文字母和阿拉伯数字中的任意一个字符,+ 则表示前面的子表达式 1 个或者多个,综合起来的含义就是 1 个或者多个英文字母和(或)数字。所以 ^\w+ 的含义是指紧跟在头部后面的 1 个或者多个英文字母和(或)数字。再看看正则式,后面还跟着一个 \d ,它代表匹配任意一个阿拉伯数字,所以整个正则表达式的含义是指紧跟在头部后面的以 1 个或者多个英文字母和(或)数字组成的,且以数字为结尾的字符串。

我们看到字符串 %1a2b2c2de 查找不到符合正则式 ^\w+\d 的字符串,所以没有替换,直接输出原来的字符串,为什么?正则式要查找的是跟在头部后面的且满足正则式的字符串,现在跟在头部后面的是 %,不满足 \w 这个表达式,而 1a2b2c2 虽然满足 \w+\d ,但是它并不是紧跟在头部 ^ 的后面,它是紧跟在 % 的后面,所以结果 2 输出原来的字符串。

正则式 (\d){4}|\1{2}

console.log("1234567890".match(/(\d){4}|\1{2}/g)); // ["1234", "5678", "", "", ""]

输出的结果:

["1234", "5678", "", "", ""]

关于“或者”的正则表达式中,第 1 个表达式 (\d){4} 匹配成功,第 2 个表达式 \1{2} 就不会去匹配了,只有第 1 个匹配失败,才会让第 2 个去匹配。

修饰符g表示全文查找,因此前两次匹配到了 “1234” 和 “5678”,此时正则引擎的指针处于数字 8 的后面,后面的字符显然子表达式 (\d){4} 无法匹配了,此时第一个捕获组 (\d) 匹配到内容为空,那么反向引用 \1 将指向空字符串,\1{2} 也就是一个空白字符串,后面可以匹配到 8、9、0 后面共 3 个位置,故最终又匹配到三个空字符串。

正则式 \d{4}|\d{2}

"1234567890".match(/\d{4}|\d{2}/g); 

输出结果为:

["1234", "5678", "90"]

\d{4} 匹配4个任意数字成功后,\d{2} 就不会匹配了,直到后面匹配 “90” 失败了,才让 \d{2} 去匹配,结果匹配成功了,字符串也到结尾了,所以最终成功匹配的结果有三个字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习pytorch--线性回归(三)

线性回归pytorch框架实现线性回归的简洁实现生成数据集读取数据定义模型初始化模型参数定义损失函数定义优化算法训练模型小结完整代码:线性回归的简洁实现 随着深度学习框架的发展&#xff0c;开发深度学习应用变得越来越便利。实践中&#xff0c;我们通常可以用比上一节更简…

smpp客户端_SMPP Java示例(客户端)

smpp客户端这篇文章通过创建一个简单的SMPP客户端向移动用户发送短信来提供SMPP Java示例&#xff0c;使用该客户端我们可以简单地提交以将消息发送给单个移动用户&#xff0c;也可以一次将消息广播给多个移动用户。另外&#xff0c;我们将验证交货收据。 出于客户端的目的&…

正则表达式的环视深度剖析

文章目录一、环视基础二、顺序环视匹配过程&#xff08;一&#xff09;顺序肯定环视匹配过程&#xff08;二&#xff09;顺序否定环视匹配过程三、逆序环视匹配过程&#xff08;一&#xff09;逆序环视基础&#xff08;二&#xff09;逆序肯定环视匹配过程1. 逆序表达式的长度固…

深度学习pytorch--softmax回归(一)

softmax回归 前几节介绍的线性回归模型适用于输出为连续值的情景。在另一类情景中&#xff0c;模型输出可以是一个像图像类别这样的离散值。对于这样的离散值预测问题&#xff0c;我们可以使用诸如softmax回归在内的分类模型。和线性回归不同&#xff0c;softmax回归的输出单元…

python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...

接上篇文章《如何用python实现excel中的vlookup功能&#xff1f;》&#xff0c;上篇说到&#xff0c;最近我在做一个小项目&#xff0c;也是用python操作excel解决财务审计工作上的一些问题&#xff0c;以便提高工作效率及其准确性。最终目的&#xff0c;刀哥是想做应收账款账龄…

阿帕奇跨域_阿帕奇齿轮泵

阿帕奇跨域Apache Gearpump是一个实时大数据流引擎。 它于2014年中期在GitHub上作为一个开源项目在英特尔构想&#xff0c;并于2016年3月8日进入Apache孵化。Gearpump的名称是对工程术语“齿轮泵”的指称&#xff0c;它是一个超级简单的泵&#xff0c;由以下组成只有两个齿轮&a…

正则表达式之 NFA 引擎匹配原理详解

文章目录一、为什么要了解引擎匹配原理二、正则表达式引擎三、预备知识&#xff08;一&#xff09;字符串组成&#xff08;二&#xff09;占有字符和零宽度&#xff08;三&#xff09;控制权和传动四、正则表达式简单匹本过程&#xff08;一&#xff09;基础匹配过程&#xff0…

阿帕奇跨域_阿帕奇光束

阿帕奇跨域Apache Beam是一个开放源代码统一模型&#xff0c;用于定义批处理和流数据并行处理管道。 使用一种开源的Beam SDK&#xff0c;您可以构建一个定义管道的程序。 然后&#xff0c;该管道由Beam支持的分布式处理后端之一执行&#xff0c;这些后端包括Apache Apex &…

unity 启动相机_Unity3D研究院之打开照相机与本地相册进行裁剪显示(三十三)...

最近做项目需要用到这个功能&#xff0c;就是在Unity中调用Android本地相册或直接打开摄像机拍照并且裁剪一部分用于用户头像&#xff0c;今天研究了一下&#xff0c;那么研究出成果了MOMO一定要分享给大家。Unity与Android的交互还有谁不会&#xff1f;&#xff1f; 如果有不会…

深度学习pytorch--MNIST数据集

图像分类数据集&#xff08;Fashion-MNIST&#xff09; 在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用&#xff0c;以方便我们观察比较算法之间在模型精度和计算效率上的区别。图像分类数据集中最常用的是手写数字识别数据集MNIS…

html 元素的属性

全局属性 全局属性是可与所有 HTML 元素一起使用的属性。 事件属性 用来定义某个事件的操作的属性叫事件属性&#xff0c;例如&#xff0c;οnclick“script”&#xff0c;元素上发生鼠标点击时触发 click 事件&#xff0c;click 事件被触发就会执行对应的脚本代码。事件属性…

nosql和rdnms_用于SaaS和NoSQL的Jdbi

nosql和rdnms一个自然的接口&#xff0c;用于与CRM&#xff0c;ERP&#xff0c;会计&#xff0c;营销自动化&#xff0c;NoSQL&#xff0c;平面文件等基于Java的数据集成 Jdbi是用于JavaSQL便利库&#xff0c;它为JDBC提供更自然的Java数据库接口&#xff0c;该接口易于绑定到…

matlab 功率谱密度 汉宁窗_如何理解随机振动的功率谱密度?

一、随机信号和正太分布有什么关系&#xff1f; 二、时域、频域之间功率守恒&#xff1f; 三、自相关又是个什么玩意&#xff1f;作为一个工程师&#xff0c;很多人对随机振动看着熟悉&#xff0c;却又实际陌生。熟悉是因为几乎每个产品在出厂时都要求要做随机振动试验&#xf…

深度学习pytorch--softmax回归(二)

softmax回归的从零开始实现实验前思考获取和读取数据获取数据集查看数据集查看下载后的.pt文件查看mnist_train和mnist_test读取数据集查看数据迭代器内容初始化模型参数定义softmax函数定义模型定义损失函数计算分类准确率模型评价--准确率开始训练可视化总结完整代码实验前思…

HTML块级元素/块标签/块元素

文章目录块元素的特点块元素清单block level element. 块级元素想在同一行显示需浮动或者 display:inline。 块元素的特点 每个块级元素都是独自占一行&#xff0c;其后的元素也只能另起一行&#xff0c;并不能两个元素共用一行&#xff1b; 元素的高度、宽度、行高、顶边距、…

物联卡查询流量_电信物联卡官网是多少?如何快速查询流量信息?

高速率设备的使用场景需要用到5G&#xff0c;中速率LET-Cat1应用范围更广&#xff0c;而低速率则要靠窄带物联网NB-IOT去维护了。这三种网络制式全都与物联网息息相关&#xff0c;这就能知道为什么国家层面对物联网基础设施建设这么重视了。电信物联卡在智能化硬件中有优秀表现…

java8日期转时间戳_Java 8日期和时间

java8日期转时间戳如今&#xff0c;一些应用程序仍在使用java.util.Date和java.util.Calendar API&#xff0c;包括使我们的生活更轻松地使用这些类型的库&#xff0c;例如JodaTime。 但是&#xff0c;Java 8引入了新的API来处理日期和时间&#xff0c;这使我们可以对日期和时间…

HTML行内元素/行级元素/内联元素/行标签/内联标签/行内标签/行元素

文章目录行内元素的特点行内元素清单可变元素列表inline element. 也叫行级元素、内联元素。行内元素默认设置宽度是不起作用&#xff0c;需设置 display:inline-block 或者 block 才行。 行内元素的特点 可以和其他元素处于一行&#xff0c;不用必须另起一行&#xff1b; 元…

深度学习pytorch--softmax回归(三)

softmax回归的简洁实现获取和读取数据定义和初始化模型softmax和交叉熵损失函数定义优化算法模型评价训练模型小结完整代码前两篇链接: 深度学习pytorch–softmax回归(一) 深度学习pytorch–softmax回归(二) 本文使用框架来实现模型。 获取和读取数据 我们仍然使用Fashion-M…

正则表达式的分类

文章目录一、正则表达式引擎二、正则表达式分类三、正则表达式比较四、Linux/OS X 下常用命令与正则表达式的关系一、正则表达式引擎 正则引擎大体上可分为不同的两类&#xff1a;DFA 和 NFA&#xff0c;而 NFA 又基本上可以分为传统型 NFA 和 POSIX NFA。 DFA(Deterministic …