当前位置: 首页 > news >正文

正则表达式零宽断言

正则表达式零宽断言

  • 工具类,正则表达式匹配文本内容
  • 正则表达式语法
  • 例子
    • 例子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)$

校验字符的表达式

相关文章:

正则表达式零宽断言

正则表达式零宽断言 工具类&#xff0c;正则表达式匹配文本内容正则表达式语法例子例子01零宽断言?< 不包含左边值? 不包含右边值例子 常用正则表达式校验数字的表达式校验字符的表达式 工具类&#xff0c;正则表达式匹配文本内容 /*** 正则表达式工具类*/ public class…...

uni-app学习记录

uni-app注意点记录 跳转到 tabBar 页面只能使用 switchTab 跳转路由API的目标页面必须是在pages.json里注册的vue页面。如果想打开web url&#xff0c;在App平台可以使用 plus.runtime.openURL或web-view组件&#xff1b;H5平台使用 window.open&#xff1b;小程序平台使用web…...

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph

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

Databend 开源周报第 124 期

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

Arduino开发实例-液体流量测量

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

【idea】解决sprintboot项目创建遇到的问题

目录 一、报错Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found 二、报错java: 错误: 无效的源发行版&#xff1a;17 三、java: 无法访问org.springframework.web.bind.annotation.CrossOrigin 四、整合mybatis的时候&#xff0c;报java.lang.Ill…...

ADC芯片CS1237在电子秤方案的优势

​随着科技的不断发展&#xff0c;电子秤已经成为我们日常生活中不可或缺的测量工具。为了满足用户对于高精度、高稳定性的需求&#xff0c;芯海ADC芯片CS1237应运而生&#xff0c;为电子秤方案带来了革命性的变革。 一、芯海ADC芯片CS1237介绍 芯海ADC芯片CS1237是一款高性能…...

Leetcode的AC指南 —— 哈希表:202. 快乐数

摘要&#xff1a; Leetcode的AC指南 —— 哈希表&#xff1a;202. 快乐数。题目介绍&#xff1a;编写一个算法来判断一个数 n 是不是快乐数。 文章目录 一、题目二、解析1、哈希表 一、题目 题目介绍&#xff1a;编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为…...

机器学习 项目结构 数据预测 实验报告

需求&#xff1a; 我经过处理得到了测试值&#xff0c;然后进一步得到预测和真实值的比较&#xff0c;然后再把之前的所有相关的参数、评估指标、预测值、比较结果都存入excel,另外我还打算做测试报告模板&#xff0c;包括敏感性分析等。您建议我这些功能如何封装这些功能&…...

[Verilog] 设计方法和设计流程

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

C语言:指向数组的指针和指向数组元素的指针

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 指向数组的指针和指向数组元素的指针常常被混淆&#xff0c;或者笼统地被称为数组指针&#xff0c;但它们之间是有差别的&#xff0c;本文就将对此进行讨论。 下面的代码…...

SQL基础:SQL 介绍和数据库基础

SQL简介 常用的Java等语言是和计算机交流的工具&#xff0c;告诉计算机&#xff0c;让计算机做一些事。 和其类似&#xff0c;SQL是 Structured Query Language 的缩写&#xff0c;即结构化的查询语言&#xff0c;是和数据库交互的工具&#xff0c;即通过既定的一些格式&…...

SpringSecurity入门

前言 Spring Security是一个用于在Java应用程序中提供身份验证和授权功能的强大框架。它构建在Spring框架之上&#xff0c;为开发人员提供了一套灵活且全面的安全性服务&#xff0c;本篇将为大家带来Spring Security的详细介绍及入门 一.安全框架 在学习了解Spring Security之…...

iOS 应用在前台时显示通知

背景&#xff1a; 在iOS应用中&#xff0c;当应用在前台运行时&#xff0c;是不会默认弹出通知的。这是iOS的设计决定&#xff0c;以避免用户在使用应用的过程中被打扰。然而&#xff0c;如果你希望在应用在前台的时候也能收到通知&#xff0c;你可以在你的应用代码中进行一些…...

Hamming space

汉明距离表示两个相同长度字符串对应位置的不同字符的数量。 对两个字符串异或运算&#xff0c;并统计1的个数并相减&#xff0c;这个数就是汉明距离。...

anaconda 安装 使用 pytorch onnx onnxruntime

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

Web请求与响应

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

ADS学习笔记(一)——更新中

在ADS中&#xff0c;信号上升时间为信号从0&#xff5e;100&#xff05;所用的时间&#xff0c;而实际上定义的上升边均为10&#xff05;&#xff5e;90&#xff05;&#xff0c;所以可以认为上升边&#xff1d;0.8*ADS设置上升时间。 一、终端开路及短路的反射信号 1.仿真条…...

智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

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

小型气象站是什么?

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

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...