正则表达式零宽断言

正则表达式零宽断言

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

校验字符的表达式

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

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

相关文章

【JAVA基础(对象和封装以及构造方法)】----第四天

对象和封装以及构造方法 面向对象和面向过程面向过程面向对象 类与对象及其使用定义类创建一个对象&#xff0c;操作类补充&#xff08;成员变量和局部变量&#xff09; private 修饰类 封装练习编写类编写测试输出结果 面向对象和面向过程 面向过程 在了解面向对象之前先来了…

用户行为分析遇到的问题-ubantu16,hadoop3.1.3【更新中】

用户行为分析传送门 我的版本 ubantu16 hadoop 3.1.3 habse 2.2.2 hive3.1.3 zookeeper3.8.3 sqoop 1.46/1.47 我sqoop把MySQL数据往hbase导数据时候有问题 重磅&#xff1a;大数据课程实验案例&#xff1a;网站用户行为分析&#xff08;免费共享&#xff09; 用户行为分析-小…

VR党建:VR全景技术如何助力党建知识传播

导语&#xff1a; 随着科技的不断发展&#xff0c;虚拟现实技术逐渐深入人们生活的方方面面。VR全景技术作为一种全新的沉浸式体验方式&#xff0c;被广泛应用于娱乐、教育、医疗等领域。而在党建学习中&#xff0c;VR全景技术也展现出了巨大的潜力&#xff0c;成为了一种创新…

「数据结构」二叉树1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;C启航 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 文章目录 &#x1f349;树&#x1f349;二叉树&#x1f34c;特殊二叉树&#x1f34c;二叉树的性质&#x1f34c;存储结构 &#x1f349;…

【PHP】身份证正则验证、校验位验证

目录 1.正则 简单正则 详细正则 2.校验位验证 1.正则 简单正则 function isValidIdCardNumber($idCardNumber) {// 身份证号长度为 15 位或 18 位$pattern /^(?:\d{15}|\d{17}[\dxX])$/;return preg_match($pattern, $idCardNumber); }$idCardNumber 12345678901234567…

Linux中用户名与UID、用户组名与GID的关系(为什么有用户名、用户组了,还要搞个UID、GID?)

文章目录 Linux中用户名与UID、用户组名与GID的关系1. 用户名和UID的区别1.1 用户名1.2 用户ID (UID) 2. 用户组名和GID的区别2.1 用户组名2.2 组ID (GID) 3. 为什么需要UID和GID Linux中用户名与UID、用户组名与GID的关系 在Linux系统中&#xff0c;用户名和用户组名主要用于…

ffmpeg入门之Windows开发之二(视频转码)

添加ffmpeg windows编译安装及入门指南-CSDN博客 的头文件和依赖库如下&#xff1a; main 函数如下&#xff1a; extern "C" { #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #endif } extern "C" { #include <libavutil/timestamp.h> #in…

OpenCV-8RGB和BGR颜色空间

一. RGB和BGR 最常见的色彩空间就是RGB&#xff0c;人眼也是基于RGB的色彩空间去分辨颜色。 OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同。 二.HSV, HSL和YUV 1.HSV(HSB) OpenCV用的最多的色彩空间是HSV. Hue&#xff1a;色相&…

LeetCode(Hot100)——7:数字反转

复习 &#xff08;1&#xff09;char charAt(int index) 返回指定索引处的 char 值。 &#xff08;2&#xff09;String substring(int beginIndex, int endIndex) 返回一个新字符串&#xff0c;它是此字符串的一个子字符串。 &#xff08;3&#xff09;String substring(int …

前端项目配置下载源npm, yarn,pnpm

前端项目配置下载源 npm: npm config set registry registryhttps://registry.npmmirror.com -g验证: npm config get registry yarn: yarn config set registry registryhttps://registry.npmmirror.com -gyarn config get registryyarn找不到, 需要管理员在命令行: set-exec…

【分享】5种方法将Excel设置为“只读”

将Excel表格设置以“只读方式”打开&#xff0c;可以提醒或者防止表格被随意改动&#xff0c;今天小编来分享一下将Excel设置为“只读”的5种方法。 方法一&#xff1a;通过“保护工作簿”设置 首先&#xff0c;打开Excel表格依次点击菜单选项卡【文件】→【信息】→【保护工作…

【无标题】CTF之SQLMAP

拿这一题来说 抓个包 复制报文 启动我们的sqlmap kali里边 sqlmap -r 文件路径 --dump --dbs 数据库 --tables 表

数据库操作习题12.12

考虑如下的人员数据&#xff0c;其中加下划线的是主码&#xff0c;数据库模式由四个关系组成: employee (empname, street, city) works (empname, compname, salary) company(id, compname, city) managers (empname, mgrname) 其中 关系 employee 给出人员的基本信息,包括人员…

浅析 SaaS、CRM、OA、ERP、eHR、进销存、财务系统的区别

在当今数字化时代&#xff0c;各种企业管理软件如雨后春笋般涌现&#xff0c;为企业的日常管理和运营带来了极大的便利。其中&#xff0c;SaaS、CRM、OA、ERP、eHR、进销存、财务系统是我们常常会听到的软件。这些软件各具特色&#xff0c;为企业解决了不同的问题。它们到底是什…

Armbian切换Wifi

找了个盒子刷了Armbian&#xff0c;主要有两个作用&#xff0c;一个是做离线下载和SMB。另外一个作用是用来搞打印服务器&#xff0c;因为家里角落比较多&#xff0c;因此有两个路由器信号&#xff0c;而打印机所在的位置的wifi信号&#xff0c;外网速度并不好&#xff0c;因此…

Relocations for this machine are not implemented,IDA版本过低导致生成汇编代码失败

目录 1、问题描述 2、安卓app发生崩溃&#xff0c;需要查看汇编代码上下文去辅助分析 3、使用IDA打开.so动态库文件&#xff0c;提示Relocations for this machine are not implemented 4、IDA版本较老&#xff0c;不支持ARM64的指令集&#xff0c;使用7.0版本就可以了 5、…

猫罐头避雷!猫咪罐头该如何挑选?

近年来&#xff0c;国货猫罐头在国内市场的崛起&#xff0c;真的是又喜又忧。喜的是国货的崛起打破了进口猫罐头一家独大的局面&#xff0c;忧的是担心大家可能会被网上大量的内容所迷惑&#xff0c;导致踩了不少坑。 那么面对市面上种类繁多的猫罐头&#xff0c;我们应该怎么…

linux系统和网络(一):文件IO

本文主要探讨linux系统编程的文件IO相关知识。 文件IO 文件存在块设备中为静态文件,open打开文件,内核在进程中建立打开文件的数据结构在内存中用于记录文件的文件参数,开辟一段内存用于存放内容,将静态文件转为动态文件 打开文件后对文件的读写操作都为对动态…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL0. 先决条件1. 全新安装2. 现有 WSL 安装3. 注意事项 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支…

MATLAB求解微积分(代码+详细解读)

大多数实际工程问题常常简化为微分方程&#xff0c;其求解显地至关重要。 符号微积分 极限 % matlab提供的求极限函数limit(),其调用格式为 % y limit(fun,x,x0) % fun为要求解的函数&#xff0c;x为函数自变量&#xff0c;x0为函数自变量的取值&#xff0c;x趋近于x0 clc;…