java正则表达式

深入java 定义正则表达式 这篇文章总结java1.4之后加入的正则表达式,总结他的使用。更多的源代码请访问我的github:https://github.com/yangsheng20080808/deepIntoJava本文分为3大部分 正则表达式的通用定义规则 正则表达式定义的例子 附加常用的匹配例子 正则表达式的通用定义规则使用正则表达式我们只要关心一个类即可:java.util.regex.Pattern 摘抄自官 阅读详情

http://www.javaeye.com/topic/164204

 字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.

Pattern是一个正则表达式经编译后的表现模式。 在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特定的String那样简单,也可以很复杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也适用于国际化的应用程序.

Pattern类的方法简述

方法 说明
static Pettern compile(String regex,int flag) 编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写)
Matcher match(CharSequence input) 获取匹配器,input时输入的待处理的字符串
static boolean matches(String regex, CharSequence input) 快速的匹配调用,直接根据输入的模式regex匹配input
String[] split(CharSequence input,int limit) 分隔字符串input,limit参数可以限制分隔的次数



Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。

Matcher类的方法简述

方法 说明
boolean matches() 对整个输入字符串进行模式匹配.
boolean lookingAt() 从输入字符串的开始处进行模式匹配
boolean find(int start) 从start处开始匹配模式
int groupCount() 返回匹配后的分组数目
String replaceAll(String replacement) 用给定的replacement全部替代匹配的部分
String repalceFirst(String replacement) 用给定的replacement替代第一次匹配的部分
Matcher appendReplacement(StringBuffer sb,String replacement) 根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后
StringBuffer appendTail(StringBuffer sb) 将输入序列中匹配之后的末尾字串添加到sb当前位置之后.



正则表达式中常见通配符:

对于单字符串比较而言,使用正则表达式没有什么优势.Regex的真正强大之处在于体现在包括字符类和量词(*,+,?)的更复杂的模式上.

字符类包括:

/d 数字

/D 非数字

/w 单字字符(0-9,A-Z,a-z)

/W 非单字字符

/s 空白(空格符,换行符,回车符,制表符)

/S 非空白

[] 由方括号内的一个字符列表创建的自定义字符类

. 匹配任何单个字符

下面的字符将用于控制将一个子模式应用到匹配次数的过程.

? 重复前面的子模式0次到一次

* 重复前面的子模式0次或多次

+ 重复前面的子模式一次到多次

以下是实例部分:

实例一:

正则式是最简单的能准确匹配一个给定String的模式,模式与要匹配的文本是等价的.静态的Pattern.matches方法用于比较一个String是否匹配一个给定模式.例程如下:

String data="java";

boolean result=Pattern.matches("java",data);

实例二:

String[] dataArr = { "moon", "mon", "moon", "mono" };

for (String str : dataArr) {

String patternStr="m(o+)n";


boolean result = Pattern.matches(patternStr, str);

if (result) {

System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");

}

else{

System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");

}

}

模式是”m(o+)n”,它表示mn中间的o可以重复一次或多次,因此moon,mon,mooon能匹配成功,而mono在n后多了一个o,和模式匹配不上.

注:

+表示一次或多次;?表示0次或一次;*表示0次或多次.

实例三:

String[] dataArr = { "ban", "ben", "bin", "bon" ,"bun","byn","baen"};

for (String str : dataArr) {

String patternStr="b[aeiou]n";


boolean result = Pattern.matches(patternStr, str);

if (result) {

System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");

}

else{

System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");

}

}

注:方括号中只允许的单个字符,模式“b[aeiou]n”指定,只有以b开头,n结尾,中间是a,e,i,o,u中任意一个的才能匹配上,所以数组的前五个可以匹配,后两个元素无法匹配.

方括号[]表示只有其中指定的字符才能匹配.

实例四:

String[] dataArr = { "been", "bean", "boon", "buin" ,"bynn"};

for (String str : dataArr) {

String patternStr="b(ee|ea|oo)n";


boolean result = Pattern.matches(patternStr, str);

if (result) {

System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");

}

else{

System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");

}

}

如果需要匹配多个字符,那么[]就不能用上了,这里我们可以用()加上|来代替,()表示一组,|表示或的关系,模式b(ee|ea|oo)n就能匹配been,bean,boon等.

因此前三个能匹配上,而后两个不能.

实例五:

String[] dataArr = { "1", "10", "101", "1010" ,"100+"};

for (String str : dataArr) {

String patternStr="/d+";


boolean result = Pattern.matches(patternStr, str);

if (result) {

System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");

}

else{

System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");

}

}

注:从前面可以知道,/d表示的是数字,而+表示一次或多次,所以模式/d+就表示一位或多位数字.

因此前四个能匹配上,最后一个因为+号是非数字字符而匹配不上.

实例六:

String[] dataArr = { "a100", "b20", "c30", "df10000" ,"gh0t"};

for (String str : dataArr) {

String patternStr="/w+/d+";


boolean result = Pattern.matches(patternStr, str);

if (result) {

System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");

}

else{

System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");

}

}

模式/w+/d+表示的是以多个单字字符开头,多个数字结尾的字符串,因此前四个能匹配上,最后一个因为数字后还含有单字字符而不能匹配.

实例七:

String str="薪水,职位 姓名;年龄 性别";

String[] dataArr =str.split("[,/s;]");

for (String strTmp : dataArr) {

System.out.println(strTmp);

}

String类的split函数支持正则表达式,上例中模式能匹配”,”,单个空格,”;”中的一个,split函数能把它们中任意一个当作分隔符,将一个字符串劈分成字符串数组.

实例八:

String str="2007年12月11日";

Pattern p = Pattern.compile("[年月日]");

String[] dataArr =p.split(str);

for (String strTmp : dataArr) {

System.out.println(strTmp);

}

Pattern是一个正则表达式经编译后的表现模式 ,它的split方法能有效劈分字符串.

注意其和String.split()使用上的不同.

实例九:

String str="10元 1000人民币 10000元 100000RMB";

str=str.replaceAll("(/d+)(元|人民币|RMB)", "¥");

System.out.println(str);

上例中,模式“(/d+)(元|人民币|RMB)”按括号分成了两组,第一组/d+匹配单个或多个数字,第二组匹配元,人民币,RMB中的任意一个,替换部分表示第一个组匹配的部分不变,其余组替换成¥.

替换后的str为¥10 ¥1000 ¥10000 ¥100000

实例十:

Pattern p = Pattern.compile("m(o+)n",Pattern.CASE_INSENSITIVE);

// 用Pattern类的matcher()方法生成一个Matcher对象

Matcher m = p.matcher("moon mooon Mon mooooon Mooon");

StringBuffer sb = new StringBuffer();

// 使用find()方法查找第一个匹配的对象

boolean result = m.find();

// 使用循环找出模式匹配的内容替换之,再将内容加到sb里

while (result) {

m.appendReplacement(sb, "moon");

result = m.find();

}

// 最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里;

m.appendTail(sb);

System.out.println("替换后内容是" + sb.toString());

实例十一:

除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,还可以用{}来指定精确指定出现的次数,X{2,5}表示X最少出现2次,最多出现5次;X{2,}表示X最少出现2次,多则不限;X{5}表示X只精确的出现5次.

例程:

String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};

for (String str : dataArr) {

String patternStr = "g(o{2,5})gle";

boolean result = Pattern.matches(patternStr, str);

if (result) {

System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");

} else {

System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");

}

}

实例十二:

-表示从..到…,如[a-e]等同于[abcde]

String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};

for (String str : dataArr) {

String regex = "T[a-c]n";

boolean result = Pattern.matches(regex, str);

if (result) {

System.out.println("字符串" + str + "匹配模式" + regex + "成功");

} else {

System.out.println("字符串" + str + "匹配模式" + regex + "失败");

}

}

实例十三:不区分大小写匹配.

正则表达式默认都是区分大小写的,使用了Pattern.CASE_INSENSITIVE则不对大小写进行区分.

String patternStr="ab";

Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);


String[] dataArr = { "ab", "Ab", "AB"};


for (String str : dataArr) {

Matcher matcher=pattern.matcher(str);


if(matcher.find()){

System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");

}

}

实例十四:使用正则表达式劈分字符串.

注意这里要把复杂的模式写在前面,否则简单模式会先匹配上.

String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别=男 年龄=45 ";

String patternStr="(/s*,/s*)|(/s*;/s*)|(/s+)";

Pattern pattern=Pattern.compile(patternStr);


String[] dataArr=pattern.split(input);


for (String str : dataArr) {

System.out.println(str);

}

实例十五:解析正则表达式中的文字,/1对应第一个小括号括起来的group1.

String regex="<(/w+)>(/w+)<//1>";

Pattern pattern=Pattern.compile(regex);


String input="<name>Bill</name><salary>50000</salary><title>GM</title>";


Matcher matcher=pattern.matcher(input);


while(matcher.find()){

System.out.println(matcher.group(2));

}

实例十六:将单词数字混合的字符串的单词部分大写.

String regex="([a-zA-Z]+[0-9]+)";

Pattern pattern=Pattern.compile(regex);


String input="age45 salary500000 50000 title";


Matcher matcher=pattern.matcher(input);


StringBuffer sb=new StringBuffer();


while(matcher.find()){

String replacement=matcher.group(1).toUpperCase();

matcher.appendReplacement(sb, replacement);

}

matcher.appendTail(sb);


System.out.println("替换完的字串为"+sb.toString());

Java 正则表达式 正则表达式中存在一些预定义字符,它们可以匹配特定的字符集合。\d:匹配任意数字字符,相当于字符类[0-9]。\D:匹配任意非数字字符,相当于字符类[^0-9]。\s:匹配任意空白字符,包括空格、制表符、换页符等,相当于字符类[f \r\t\v]。\S:匹配任意非空白字符,相当于字符类。w:匹配任意字母、数字或下划线字符,相当于字符类。\W:匹配任意非字母、数字或下划线的字符,相当于字符类。:通常用于匹配除换行符之外的任意单个字符。但在一些情况下,它可以配置为匹配包括换行符在内的任意字符。 阅读详情

相关推荐

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 829

Java正则表达式

介绍并简单使用Java正则表达式

m0_62946761的博客 7255

防火墙——双机热备理论讲解

本端和对端协商失败。有可能是因为本端和对端设备的软件版本不一致、某端配置错误、对端设备的心跳接口状态为Down、HRP源或目的端口号被修改、或者底层链路不通等原因导致。会话表、SeverMap表、IP监控表、分片缓存表、GTP表、黑名单、PAT方式端口映射表、NO-PAT方式地址映射表。两台设备一主一备,正常情况下业务流量由主设备处理,当主设备故障时,业务流量平滑切换到备用设备进行处理,业务不中断。开启自动备份后,当主用设备配置了一条可备份的命令或产生了可备份的会话表状态时,会直接备份到备用设备上。

m0_49864110的博客 2万+

Java——正则表达式详解

Java对正则表达式的支持是从1.4版本开始的,此前的JRE版本不支持正则表达式。Java语言中的正则表达式匹配功能主要是通过和类实现的。find():在一个字符串里寻找一个给定模式的匹配:用一个给定的模式尝试匹配一个字符串的开头matches():用一个给定的模式去尝试匹配一个完整的字符串:进行替换操作,对所有的匹配都进行替换:进行替换操作,只对第一个匹配进行替换compile():把一个正则表达式编译成一个模式flags():返回某给定模式的匹配标志matches()

吴声子夜歌的博客 2万+

超大规模AI集群跨数据中心互联:Scale-Across技术实现与部署实践

分布式系统通过将计算任务分散到多个节点协同执行,实现算力的横向扩展。其核心原理在于网络通信、数据同步和资源调度机制的技术协同。在AI基础设施领域,分布式架构能有效突破单数据中心算力瓶颈,支撑万亿参数大模型训练。特别是面对长距离传输时延和带宽稳定性挑战,需要采用RDMA、确定性网络等关键技术。Scale-Across作为分布式系统的高级形态,通过跨地域多数据中心互联,构建逻辑统一的AI算力池,为超大规模AI训练和全球推理服务提供核心支撑。本文聚焦AI集群跨数据中心互联的技术路径,涵盖全栈优化、网络自治等实践方

chouxuyi9789的博客 400

使用verilog设计实现QR分解

QR(正交三角)分解法是求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。 使用verilog对QR实现方法进行设计并进行功能仿真: 如下: 顶层模块代码: module TOP( H1R, H1I, H2R, H2I, H3R, H3I, H4R, H4I, clk, rst_n, Y1R, Y1I, Y2R, Y2I, X1R, X1I, X2R, X2I ); parameter width = 16; // I

QQ_778132974的博客 2150

【Java 基础篇】Java 正则表达式

本篇博客介绍了 Java 正则表达式的基本概念、语法和常用操作。我们学习了如何创建正则表达式模式对象、匹配器对象,以及如何使用它们进行字符串的匹配、提取和替换操作。正则表达式在 Java 程序中具有广泛的应用,可以帮助我们处理文本数据,提取关键信息,进行格式验证等。通过灵活运用正则表达式,我们可以更高效地处理字符串操作。希望本篇博客对你理解和使用 Java 正则表达式有所帮助。祝你在 Java 编程中取得更多的成功!

繁依Fanyi的博客 1万+

NPC 三电平逆变器中点电位平衡算法详解

最常用:零序电压注入(简单、计算量小)最可靠:虚拟空间矢量调制(VSVPWM)及其改进形式(全范围平衡)趋势:结合模型预测控制(MPC)或智能算法(模糊、神经网络)进一步提升动态性能和鲁棒性。NPC 三电平逆变器中点电位平衡算法的 C# 实现示例(零序电压注入法 + 闭环补偿)在 NPC(Neutral Point Clamped)三电平逆变器中,中点电位平衡最常用且易于软件实现的方案是零序电压注入法。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 325

【Java从入门到精通】Java 正则表达式

正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。Java 提供了 java.util.regex 包,它包含了 Pattern 和 Matcher 类,用于处理正则表达式的匹配操作。

RL2698853114的博客 1309

软件可靠性设计

本文系统介绍了软件可靠性设计与建模的理论框架和实施方法。首先从可靠性定义、核心思想和与建模的关系等理论基础出发,重点阐述了模块化设计、冗余容错、异常处理等六类可靠性设计方法及其技术栈。文章详细分析了可靠性设计在软件生命周期各阶段的应用,并深入探讨了设计与建模的深度结合机制,包括参数影响、验证方法和量化指标。最后提出了覆盖设计、开发、测试和运行四个阶段的落地策略,形成完整的"设计-建模-运行"流程体系。全文强调通过预防性设计和量化建模相结合的方法提升软件系统的可靠性和稳定性。

moton2017的博客 896

CelebA-HQ数据集下载【详细明了版】分辨率包括【64,128,256,512,1024】

CelebA-HQ 是在ICLR2018上,nVidia发表了一篇名为Progressive Growing of GANs for Improved Quality, Stability, and Variation的论文,文中通过训练高分辨率GAN生成了一个新的人脸数据集CelebA-HQ.CelebA是港科大汤晓鸥组收集的人脸数据集(总共200k图片),包括了人脸特征点(landmark),人脸属性(attribute)等信息,详细介绍参考链接[1]和[2]

zik的博客 1万+

java正整数正则表达式_Java 正则表达式

Java 正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配 "Hello World" 字符串。.(点号)也是一个正则表达式,它匹配任何一个字符如:"a" 或 "1"。下表列出了一些正则表达式的实例及描述:正...

weixin_35652131的博客 4883

RK3568笔记五十四:SORT实时目标追踪

YOLOv5具备目标检测的功能,把视频分解成多幅图像并逐帧执行时,如果视频帧中有多个目标,如何知道一帧中的目标和上一帧是同一个对象就是目标跟踪的工作。DeepSort是实现目标跟踪的算法,从sort(simple online and realtime tracking)演变而来,使用卡尔曼滤波器预测所检测对象的运动轨迹,匈牙利算法将它们与新的检测目标相匹配。结合YOLOv5和DeepSORT可以在实时场景中实现高效的目标检测和跟踪。

789

Java正则表达式——Java筑基

正则表达式并不仅仅局限于某种语言,但是在每个语言中都有差异。

qq_42544728的博客 2849

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java 端口 正则表达式_Java 正则表达式

Java 正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配 "Hello World" 字符串。.(点号)也是一个正则表达式,它匹配任何一个字符如:"a" 或 "1"。下表列出了一些正则表达式的实例及描述:正...

weixin_31829387的博客 673

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Java中正则表达式使用方法详解
下一篇: 密码正则表达式
DeepBlueII
博客等级 码龄18年 7粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值