正则表达式零宽断言
正则表达式零宽断言
- 工具类,正则表达式匹配文本内容
- 正则表达式语法
- 例子
- 例子01
- 零宽断言
- ?<= 不包含左边值
- ?= 不包含右边值
- 例子
- 常用正则表达式
- 校验数字的表达式
- 校验字符的表达式
工具类,正则表达式匹配文本内容
/*** 正则表达式工具类*/
public class RegexUtil {/*** 正则表达式匹配文本内容* @param text 需要查找的内容* @param regex 配置正则表达式* @return 匹配到的内容列表*/public static List<String> getList(String text, String regex) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);List<String> list = new ArrayList<>();while (matcher.find()) {String group = matcher.group();list.add(group);}System.err.println(String.format("group=%s", list));return list;}/*** 从文本中匹配正则表达式,匹配到的文本列表和目标列表进行对比* @param text 需要查找的文本* @param regex 正则表达式* @param targetArr 目标列表*/public static void findAndCompare(String text, String regex, String[] targetArr) {List<String> list = RegexUtil.getList(text, regex);Assert.isTrue(list.equals(Arrays.asList(targetArr)), "两个List应该相等");}
}
正则表达式语法
字符 | 说明 | 例子 |
---|---|---|
\ | 将下一字符标记为特殊字符 | \n 匹配 换行符 ;\\ 匹配 \ ; \\( 匹配 ( |
^ | 匹配输入字符串开始的位置 | |
$ | 匹配输入字符串结尾的位置 | |
– | – | |
– | – | |
x|y | 匹配 x 或 y。 | "z|food" 匹配 z或者food ; "(z|f)ood" 匹配 zood 或者 food |
[xyz] | 字符集。匹配包含的任一字符。 | "[abc]"匹配"plain"中的"a" |
[^xyz] | 反向字符集。匹配未包含的任何字符。 | "[^pla]"匹配"plain"中的 i和n |
[a-z] | 字符范围。匹配指定范围内的任何字符。 | |
[^a-z] | 反向范围字符。匹配不在指定的范围内的任何字符。 | |
– | – | |
– | – | |
{n} | n 是非负整数。正好匹配 n 次。 | "zo{2}" 匹配 zoo ` |
{n,} | n 是非负整数。至少匹配 n 次。 | "zo{2,}" 匹配 zoo 、zooo、 zoooo 等 ` |
{n,m} | m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。 | "zo{2,3}" 匹配 zoo 、zooo ` |
– | – | |
– | – | |
* | 零次或多次匹配前面的字符或子表达式 | "zo*" 匹配 z、zo、zoo 等效于 zo{0,} |
+ | 一次或多次匹配前面的字符或子表达式 | "zo+" 匹配 zo、zoo 等效于 zo{1,} |
? | 零次或一次匹配前面的字符或子表达式 | "do(es)?" 匹配 do、does 等效于 do(es){0,1} |
. | 匹配除"\r\n"之外的任何单个字符。 | 若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。 |
– | – | |
– | – | |
\b | 匹配一个字边界,即字与空格间的位置。 | |
\B | 非字边界匹配。 | |
\d | 数字字符匹配 | 等效于 [0-9] |
\D | 非数字字符匹配 | 等效于 [^0-9] |
– | – | |
– | – | |
\cx | 匹配 x 指示的控制字符。x 的值必须在 A-Z 或 a-z 之间。 | \cM 匹配 Control-M 或回车符 |
\xn | 匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。 | "\x41"匹配"A" ; "\x041" 与"\x04"&"1" 等效 |
\f | 换页符匹配。 | 等效于 \x0c 和 \cL |
\n | 换行符匹配。 | 等效于 \x0a 和 \cJ |
\r | 回车符匹配。 | 等效于 \x0d 和 \cM |
\t | 制表符匹配。 | 等效于 \x09 和 \cI |
\v | 垂直制表符匹配。 | 等效于 \x0b 和 \cK |
\s | 任何空白字符匹配。 | 等效于 [ \f\n\r\t\v] |
\S | 任何非空白字符匹配。 | 等效于 [^\f\n\r\t\v] |
\w | 任何字类字符匹配。 | 等效于 [A-Za-z0-9_] |
\W | 任何非单词字符匹配。 | 等效于 [^A-Za-z0-9_] |
– | – | |
– | – | |
(pattern) | 匹配 pattern 并捕获该匹配的子表达式。 | |
(?:pattern) | 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。 | industr(?:y|ies) 匹配 industry 和 industries |
(?=pattern) | 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。 | Windows (?=95|98|NT|2000) 匹配 “Windows 2000” 中的 Windows ; 不匹配 "Windows 3.1"中的 Windows |
例子
例子01
public class RegexDemo01 {@Testpublic void test01() {// \ 将下一字符标记为特殊字符RegexUtil.findAndCompare("北京市(海定区)", "\\(", new String[] {"("});// ^ 匹配输入字符串开始的位置RegexUtil.findAndCompare("abc, add, add", "^a\\w+", new String[] {"abc"});// $ 匹配输入字符串结尾的位置RegexUtil.findAndCompare("abd, ddd, abd", "\\w+d$", new String[] {"abd"});}@Testpublic void test02() {// 匹配或者关系RegexUtil.findAndCompare("hello, z and food", "z|food", new String[] {"z", "food"});RegexUtil.findAndCompare("zood, z and food", "(z|f)ood", new String[] {"zood", "food"});// 字符集。匹配包含的任一字符。RegexUtil.findAndCompare("plain", "[abc]", new String[] {"a"});// (在[]中被当成普通字符RegexUtil.findAndCompare("plain (xzy)", "[ab(z)c]", new String[] {"a", "(", "z", ")"});// 字符集。匹配包含的任一字符。RegexUtil.findAndCompare("plain", "[^pla]", new String[] {"i", "n"});}@Testpublic void test03() {String text = "abc, zoooG, zoo, zoom!, bzoo!";// {n} n 是非负整数。正好匹配 n 次RegexUtil.findAndCompare(text, "zo{3}", new String[] {"zooo"});// {n,} n 是非负整数。至少匹配 n 次。RegexUtil.findAndCompare(text, "zo{2,}", new String[] {"zooo", "zoo", "zoo", "zoo"});// {n,m} m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。RegexUtil.findAndCompare(text, "zo{3,4}", new String[] {"zooo"});}@Testpublic void test04() {String text = "abcz, zoy, zoooG, zoo, zoom!, bzoo!";// * 零次或多次匹配前面的字符或子表达式RegexUtil.findAndCompare(text, "zo*", new String[] {"z", "zo", "zooo", "zoo", "zoo", "zoo"});// + 一次或多次匹配前面的字符或子表达式RegexUtil.findAndCompare(text, "zo+", new String[] {"zo", "zooo", "zoo", "zoo", "zoo"});// ? 一次或多次匹配前面的字符或子表达式RegexUtil.findAndCompare(text, "zo(oo)?", new String[] {"zo", "zooo", "zo", "zo", "zo"});}
}
零宽断言
?<= 不包含左边值
(?<=exp) 也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
例如:(?<=\bdanc)\w+\b 查找 I’m dancing,它会匹配 ing
?= 不包含右边值
(?=exp) 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
例如:“\b\w+(?=ing\b)” 查找 I’m dancing,它会匹配 danc
例子
public class RegexDemo09 {@Test// 匹配 一个ing结尾的单词public void test01() {String text = "Pingpong, I'm singing while you're dancing.";String regex = "\\b\\w+(?=ing\\b)ing";RegexUtil.findAndCompare(text, regex, new String[] {"singing", "dancing"});}@Test// 匹配 一个sing开头的单词public void test02() {String text = "Pingpong, I'm singing while you're dancing.";String regex = "sing(?<=\\bsing)\\w+\\b";RegexUtil.findAndCompare(text, regex, new String[] {"singing"});}@Test// 匹配 ()里面的内容public void test03() {String text = "北京市(海定区)(朝阳区)(西城区)";String regex = "(?<=\\().*?(?=\\))";RegexUtil.findAndCompare(text, regex, new String[] {"海定区", "朝阳区", "西城区"});}@Test// 匹配 <string></string>里面的内容public void test04() {String text = "<string>小帅</string>";String regex = "(?<=\\<string\\>).*?(?=\\</string\\>)";RegexUtil.findAndCompare(text, regex, new String[] {"小帅"});}// @Test// 匹配 <string meta='xx'></string>里面的内容,string里面可以有不确定属性public void test05() {String text = "<string>小帅</string> <>飞机<> <string meta='utf-8'>小妞</string>";String regex = "(?<=\\<string\\b(\\w)\\b\\>).*?(?=\\</string\\>)";RegexUtil.findAndCompare(text, regex, new String[] {"小帅"});}
}
常用正则表达式
校验数字的表达式
描述 | 表达式 |
---|---|
n位的数字 | ^\d{n}$ |
至少n位的数字 | ^\d{n,}$ |
m-n位的数字 | ^\d{m,n}$ |
零和非零开头的数字 | ^(0|[1-9][0-9]*)$ |
非零开头的最多带两位小数的数字 | ^([1-9][0-9]*)+(.[0-9]{1,2})?$ |
带1-2位小数的正数或负数 | ^(-)?\d+(.\d{1,2})$ |
正数、负数、和小数 | ^(-|+)?\d+(.\d+)?$ |
有两位小数的正实数 | 2+(.[0-9]{2})?$ |
有1~3位小数的正实数 | 3+(.[0-9]{1,3})?$ |
非零的正整数 | 4\d*$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$ |
非零的负整数 | ^-[1-9][]0-9"$ 或 ^-[1-9]\d$ |
非负整数 | ^\d+$ 或 5\d*|0$ |
非正整数 | ^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$ |
非负浮点数 | ^\d+(.\d+)?$ 或 6\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$ |
非正浮点数 | ^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$ |
正浮点数 | 7\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$ |
负浮点数 | ^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$ |
浮点数 | ^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$ |
校验字符的表达式
相关文章:
正则表达式零宽断言
正则表达式零宽断言 工具类,正则表达式匹配文本内容正则表达式语法例子例子01零宽断言?< 不包含左边值? 不包含右边值例子 常用正则表达式校验数字的表达式校验字符的表达式 工具类,正则表达式匹配文本内容 /*** 正则表达式工具类*/ public class…...
uni-app学习记录
uni-app注意点记录 跳转到 tabBar 页面只能使用 switchTab 跳转路由API的目标页面必须是在pages.json里注册的vue页面。如果想打开web url,在App平台可以使用 plus.runtime.openURL或web-view组件;H5平台使用 window.open;小程序平台使用web…...

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph
API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph API资源对象StorageClass SC的主要作用在于,自动创建PV,从而实现PVC按需自动绑定PV。 下面我们通过创建一个基于NFS的SC来演示SC的作用。 要想使用NFS的SC,还需要安装一个NFS…...

Databend 开源周报第 124 期
Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 新增对 Delta 和…...

Arduino开发实例-液体流量测量
液体流量测量 文章目录 液体流量测量1、流量传感器介绍2、硬件准备及接线3、代码实现在本文中,将介绍如何流量传感器进行测量液体流量。 流量传感器用于测量液体流速。 市场上有不同类型的流量传感器,在本文中,我们将使用霍尔效应流量传感器。 这些类型的流量传感器是非侵入…...

【idea】解决sprintboot项目创建遇到的问题
目录 一、报错Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found 二、报错java: 错误: 无效的源发行版:17 三、java: 无法访问org.springframework.web.bind.annotation.CrossOrigin 四、整合mybatis的时候,报java.lang.Ill…...
ADC芯片CS1237在电子秤方案的优势
随着科技的不断发展,电子秤已经成为我们日常生活中不可或缺的测量工具。为了满足用户对于高精度、高稳定性的需求,芯海ADC芯片CS1237应运而生,为电子秤方案带来了革命性的变革。 一、芯海ADC芯片CS1237介绍 芯海ADC芯片CS1237是一款高性能…...
Leetcode的AC指南 —— 哈希表:202. 快乐数
摘要: Leetcode的AC指南 —— 哈希表:202. 快乐数。题目介绍:编写一个算法来判断一个数 n 是不是快乐数。 文章目录 一、题目二、解析1、哈希表 一、题目 题目介绍:编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为…...
机器学习 项目结构 数据预测 实验报告
需求: 我经过处理得到了测试值,然后进一步得到预测和真实值的比较,然后再把之前的所有相关的参数、评估指标、预测值、比较结果都存入excel,另外我还打算做测试报告模板,包括敏感性分析等。您建议我这些功能如何封装这些功能&…...

[Verilog] 设计方法和设计流程
主页: 元存储博客 文章目录 1. 设计方法2. 设计流程 3 Vivado软件设计流程总结 1. 设计方法 Verilog 的设计多采用自上而下的设计方法(top-down)。设计流程是指从一个项目开始从项目需求分析,架构设计,功能验证&#…...

C语言:指向数组的指针和指向数组元素的指针
相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 指向数组的指针和指向数组元素的指针常常被混淆,或者笼统地被称为数组指针,但它们之间是有差别的,本文就将对此进行讨论。 下面的代码…...
SQL基础:SQL 介绍和数据库基础
SQL简介 常用的Java等语言是和计算机交流的工具,告诉计算机,让计算机做一些事。 和其类似,SQL是 Structured Query Language 的缩写,即结构化的查询语言,是和数据库交互的工具,即通过既定的一些格式&…...

SpringSecurity入门
前言 Spring Security是一个用于在Java应用程序中提供身份验证和授权功能的强大框架。它构建在Spring框架之上,为开发人员提供了一套灵活且全面的安全性服务,本篇将为大家带来Spring Security的详细介绍及入门 一.安全框架 在学习了解Spring Security之…...
iOS 应用在前台时显示通知
背景: 在iOS应用中,当应用在前台运行时,是不会默认弹出通知的。这是iOS的设计决定,以避免用户在使用应用的过程中被打扰。然而,如果你希望在应用在前台的时候也能收到通知,你可以在你的应用代码中进行一些…...
Hamming space
汉明距离表示两个相同长度字符串对应位置的不同字符的数量。 对两个字符串异或运算,并统计1的个数并相减,这个数就是汉明距离。...

anaconda 安装 使用 pytorch onnx onnxruntime
一:安装 如果不是 x86_64,需要去镜像看对应的版本 安装 Anaconda 输入命令 bash Anaconda3-2021.11-Linux-x86_64.sh 然后输入 yes 表示同意 确认安装的路径,一般直接回车安装在默认的 /home/你的名字/anaconda3 很快就安装完毕。输入 yes…...

Web请求与响应
目录 Postman Postman简介 Postman的使用 请求 简单参数 实体参数 数组参数 集合参数 日期参数 Json参数 路径参数 响应 ResponseBody 统一响应结果 Postman Postman简介 postman是一款功能强大的网页调试与发送网页http请求的Chrome插件,常用于进行…...

ADS学习笔记(一)——更新中
在ADS中,信号上升时间为信号从0~100%所用的时间,而实际上定义的上升边均为10%~90%,所以可以认为上升边=0.8*ADS设置上升时间。 一、终端开路及短路的反射信号 1.仿真条…...

智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.冠状病毒群体免疫算法4.…...

小型气象站是什么?
随着科技的发展,我们的生活变得越来越便捷。如今,一款名为小型气象站的新兴设备正在逐渐走进我们的生活,为我们的日常生活增添了更多的便利和舒适。 WX-CQ12小型气象站是一种集成了多种传感器和数据采集技术的智能设备,可以实时监…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...