Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
转载自 Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
Greediness(贪婪型):最大匹配
X?、X*、X+、X{n,} 是最大匹配。例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许你所期待的结果是想匹配 “<tr>”,但是实际结果却会匹配到 “<tr>aava </tr>。
在 Greediness 的模式下,会尽量大范围的匹配,直到匹配了整个内容,这时发现匹配不能成功时,开始回退缩小匹配范围,直到匹配成功
String test = "a<tr>aava </tr>abb "; String reg = "<.+>"; System.out.println(test.replaceAll(reg, "###"));
输出:a###abb
Reluctant(Laziness)(勉强型):最小匹配
X??、X*?、X+?、X{n,}? 是最小匹配,其实X{n,m}?和X{n }?有些多余。在 Greediness 模式之后添加 ? 就成最小匹配。
在 Reluctant 的模式下,只要匹配成功,就不再继续尝试匹配更大范围的内容
String test = "a<tr>aava </tr>abb "; String reg = "<.+?>"; System.out.println(test.replaceAll(reg, "###"));
输出:a###aava ###abb
与 Greediness 不同,Reluctant 模式下匹配了两次内容
Possessive(占有型):完全匹配
X?+、X*+、X++、X{n,}+ 是完全匹配,在 Greediness 模式之后添加 + 就成完全匹配。
Possessive 模式与 Greediness 有一定的相似性,那就是都尽量匹配最大范围的内容,直到内容结束,但与 Greediness 不同的是,完全匹配不再回退尝试匹配更小的范围。
String test = "a<tr>aava </tr>abb "; String reg = "<.++>"; String test2 = "<tr>"; String reg2 = "<tr>"; System.out.println(test.replaceAll(reg, "###")); System.out.println(test2.replaceAll(reg2, "###"));
输出:a<tr>aava </tr>abb
###
Java 正则表达式匹配模式[贪婪型、勉强型、占有型]相关推荐
- java 完全匹配,Java 正则表达式匹配模式(贪婪型、勉强型、占有型)
Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 "<.>" 去匹配 "a aava abb",也许你 ...
- 正则表达式中的贪婪、勉强、侵占模式到底是什么意思?如何进行使用?
正则表达式中的贪婪.勉强.侵占模式到底是什么意思?如何进行使用? 前言 正文 贪婪.勉强.侵占模式对比 通过实例分析贪婪.勉强.侵占 贪婪模式 勉强模式 侵占模式 小结 前言 不管是什么语言,基本都会 ...
- bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...
- java正则验正斜杠_JAVA资格认:java正则表达式匹配斜杠
在正则表达式里面匹配一个斜杠,需要用4个斜杠: Java代码 import java.util.regex.Matcher; import java.util.regex.Pattern; publi ...
- java 正则表达式匹配数字_java正则表达式匹配所有数字的案例
用于匹配的正则表达式为 :([1-9]\d*\.?\d*)|(0\.\d*[1-9]) ( [1-9] :匹配1~9的数字: \d :匹配数字,包括0~9: * :紧跟在 \d 之后,表明可以匹配零个 ...
- java正则表达式匹配字符串_java正则表达式如何匹配字符串
java正则表达式匹配字符串的方法:使用tostring,代码为[while(matcher.find()){tmp.add(matcher.group(1).toString());}]. java ...
- java正则表达式 匹配次数_正则表达式教程之重复匹配详解
本文实例讲述了正则表达式教程之重复匹配.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法 ...
- java正则表达式匹配字符串
今天练习java比赛题时,忘记了java的正则表达式怎么用,特地查了一下.觉得用好正则表达式真的是能有意想不到的效果. Talk is cheap,show you their code //解释内容 ...
- java正则表达式匹配路径_正则表达式教程之位置匹配详解
本文实例讲述了正则表达式教程之位置匹配.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法 ...
最新文章
- CentOS7.5实践快速部署LAMP+Tomcat成功运行阿里云或者腾讯云
- Java 策略模式和状态模式
- 我的JavaScript for Visual Studio插件开源了
- 永恒之塔 java_AionChs
- 使用POI读取word文档
- python mobilenetssd android_MobileNetV2-SSDLite运行
- git clone拉取指定分支
- 负载均衡的几种方式_负载均衡的几种类型
- 深度学习笔记 —— 卷积层
- (附代码)手写滑动验证码,完整代码开放
- FREEIPA:ipa-server的部署使用
- 如何获取qq邮箱的秘钥
- STM32物联网项目-单极性步进电机28BYJ-48
- 2021高考成绩内蒙查询,2021内蒙古高考成绩查询入口
- Windows server 2012R2 设置文件共享目录报错:无法连接到C$管理共享已验证文件夹xxx在计算机xxx上是否存在
- 一周AI资讯|如果深度学习成为“侦探”,会发生什么?
- 资产监测设备之华大单片机Boot软件升级
- 如何在国际学术会议上作一场精彩的口头报告
- 《傅雷家书》读后感之一
- androidAPP接入微信分享【最新】
热门文章
- 7-3 树的同构 (25 分)(思路加详解)来呀baby!!!!!!!!
- [JavaWeb-HTML]HTML标签_文件标签
- [C++11]共享智能指针shared_ptr指定删除器
- hdu4911 Inversion-归并排序
- K-periodic Garland CodeForces - 1353E(暴力+贪心+dp)
- Java修炼之路——基础篇——Java集合类详解2
- Easy Math(ACM-ICPC 2018 徐州赛区网络预赛)(递归 + 杜教筛)
- P1975 [国家集训队]排队(三维偏序)
- P6348 [PA2011]Journeys 线段树优化建图 区间连区间
- P4735 最大异或和