转载自  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 正则表达式匹配模式[贪婪型、勉强型、占有型]相关推荐

  1. java 完全匹配,Java 正则表达式匹配模式(贪婪型、勉强型、占有型)

    Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 "<.>" 去匹配 "a aava abb",也许你 ...

  2. 正则表达式中的贪婪、勉强、侵占模式到底是什么意思?如何进行使用?

    正则表达式中的贪婪.勉强.侵占模式到底是什么意思?如何进行使用? 前言 正文 贪婪.勉强.侵占模式对比 通过实例分析贪婪.勉强.侵占 贪婪模式 勉强模式 侵占模式 小结 前言 不管是什么语言,基本都会 ...

  3. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道

    字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...

  4. java正则验正斜杠_JAVA资格认:java正则表达式匹配斜杠

    在正则表达式里面匹配一个斜杠,需要用4个斜杠: Java代码 import java.util.regex.Matcher; import java.util.regex.Pattern; publi ...

  5. java 正则表达式匹配数字_java正则表达式匹配所有数字的案例

    用于匹配的正则表达式为 :([1-9]\d*\.?\d*)|(0\.\d*[1-9]) ( [1-9] :匹配1~9的数字: \d :匹配数字,包括0~9: * :紧跟在 \d 之后,表明可以匹配零个 ...

  6. java正则表达式匹配字符串_java正则表达式如何匹配字符串

    java正则表达式匹配字符串的方法:使用tostring,代码为[while(matcher.find()){tmp.add(matcher.group(1).toString());}]. java ...

  7. java正则表达式 匹配次数_正则表达式教程之重复匹配详解

    本文实例讲述了正则表达式教程之重复匹配.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法 ...

  8. java正则表达式匹配字符串

    今天练习java比赛题时,忘记了java的正则表达式怎么用,特地查了一下.觉得用好正则表达式真的是能有意想不到的效果. Talk is cheap,show you their code //解释内容 ...

  9. java正则表达式匹配路径_正则表达式教程之位置匹配详解

    本文实例讲述了正则表达式教程之位置匹配.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法 ...

最新文章

  1. CentOS7.5实践快速部署LAMP+Tomcat成功运行阿里云或者腾讯云
  2. Java 策略模式和状态模式
  3. 我的JavaScript for Visual Studio插件开源了
  4. 永恒之塔 java_AionChs
  5. 使用POI读取word文档
  6. python mobilenetssd android_MobileNetV2-SSDLite运行
  7. git clone拉取指定分支
  8. 负载均衡的几种方式_负载均衡的几种类型
  9. 深度学习笔记 —— 卷积层
  10. (附代码)手写滑动验证码,完整代码开放
  11. FREEIPA:ipa-server的部署使用
  12. 如何获取qq邮箱的秘钥
  13. STM32物联网项目-单极性步进电机28BYJ-48
  14. 2021高考成绩内蒙查询,2021内蒙古高考成绩查询入口
  15. Windows server 2012R2 设置文件共享目录报错:无法连接到C$管理共享已验证文件夹xxx在计算机xxx上是否存在
  16. 一周AI资讯|如果深度学习成为“侦探”,会发生什么?
  17. 资产监测设备之华大单片机Boot软件升级
  18. 如何在国际学术会议上作一场精彩的口头报告
  19. 《傅雷家书》读后感之一
  20. androidAPP接入微信分享【最新】

热门文章

  1. 7-3 树的同构 (25 分)(思路加详解)来呀baby!!!!!!!!
  2. [JavaWeb-HTML]HTML标签_文件标签
  3. [C++11]共享智能指针shared_ptr指定删除器
  4. hdu4911 Inversion-归并排序
  5. K-periodic Garland CodeForces - 1353E(暴力+贪心+dp)
  6. Java修炼之路——基础篇——Java集合类详解2
  7. Easy Math(ACM-ICPC 2018 徐州赛区网络预赛)(递归 + 杜教筛)
  8. P1975 [国家集训队]排队(三维偏序)
  9. P6348 [PA2011]Journeys 线段树优化建图 区间连区间
  10. P4735 最大异或和