java正则表达式中的数量词
java中的正则位于java.util.regex包中,这个包中只有一个MatchResult接口和Matcher、Pattern两个类。
正则中的数量词有Greedy (贪婪)、Reluctant(懒惰)和Possessive(强占)三种
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
Greedy是最常用的,它的匹配方式是先把整个字符串吞下,然后匹配整个字符串,如果不匹配,就从右端吐出一个字符,再进行匹配,直到找到匹配或把整个字符串吐完为止。
Matcher m=Pattern.compile("a.*b") .matcher("a====b=========b====="); while(m.find()){ System.out.println(m.group()); } 输出: a====b=========b
因为总是从最大 匹配开始匹配,故称贪婪。
Reluctant 数量词 | |
---|---|
X?? | X,一次或一次也没有 |
X*? | X,零次或多次 |
X+? | X,一次或多次 |
X{n}? | X,恰好 n 次 |
X{n,}? | X,至少 n 次 |
X{n,m}? | X,至少 n 次,但是不超过 m 次 |
Reluctant正好和Greedy相反,它先从最小匹配开始,先从左端吞入一个字符,然后进行匹配,若不匹配就再吞入一个字符,直到找到匹配或将整个字符串吞入为止。
Matcher m=Pattern.compile("a.*?b") .matcher("a====b=========b====="); while(m.find()){ System.out.println(m.group()); } 输出: a====b
因为总是从最小匹配开始,故称懒惰。
Possessive 数量词 | |
---|---|
X?+ | X,一次或一次也没有 |
X*+ | X,零次或多次 |
X++ | X,一次或多次 |
X{n}+ | X,恰好 n 次 |
X{n,}+ | X,至少 n 次 |
X{n,m}+ | X,至少 n 次,但是不超过 m 次 |
Possessive和Greedy的匹配方式一样,先把整个字符串吞下,然后匹配整个字符串,如果匹配,就认为匹配,如果不匹配,就认为整个字符串不匹配,它不会从右端吐出一个字符串再进行匹配,只进行一次
Matcher m=Pattern.compile("a.*+b") .matcher("a====b=========b====="); while(m.find()){ System.out.println(m.group()); } 输出:
因为贪婪但并不聪明,故称强占。
java正则表达式中的数量词相关推荐
- java正则表达式中的数量词介绍及区别
Java的正则表达式相关的类位于 java.util.regex 包中; 这个包中只有一个 MatchResult 接口和 Matcher.Pattern 两个类; 有关正则表达式的使用请参考Java ...
- Java正则表达式中的反向引用
Java正则表达式中的反向引用是Java提供的另一个重要功能. 要了解反向引用 ,我们首先需要了解群组 . 正则表达式中的分组意味着将多个字符视为一个单元. 通过将要分组的字符放在一组括号" ...
- Java正则表达式中的捕获组的概念及相关API使用
要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对"()"分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次 ...
- java pattern matches,Java正则表达式中的Pattern.matches()方法
java.util.regex.Pattern.matches()方法匹配正则表达式和给定的输入.它有两个参数,即正则表达式和输入.如果正则表达式和输入匹配,则返回true,否则返回false. 给出 ...
- 关于Java正则表达式中转义符“\\”的使用
一.前言 在复习到正则表达式这一部分的内容时,我注意到Java中要想使用转义符必须要用双反斜杠来达到其他语言中单反斜杠的效果,出于对这个问题的好奇我查阅了一些资料,并初步了解了Java正则表达式中转义 ...
- Java 正则表达式中为什么反斜杠“\“需要用“\\\\”表示
正则表达式语法 在其他语言中,\\(两个斜杠) 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义. 在 Java 中,\\ (两个斜杠)表示:我要插入一个正则表达式 ...
- Java 正则表达式 中的 任意字符
原来正则表达式中的"."代表的是除换行以外的任意字符,如果要真正代表任意字符,需要把换行符也加进去,但是经过测试"[.\\n]"不生效,可以使用"\\ ...
- java matcher函数_在Java正则表达式中使用Matcher.end()方法
方法java.util.regex.Matcher.end()返回根据正则表达式从序列中匹配最后一个字符后的偏移值.此方法不需要任何参数.如果没有匹配发生,或者匹配操作失败,则抛出IllegalSta ...
- java正则表达式中的斜杠\
首先,我们需要知道在java字符串和正则表达式中,"\"都具有特殊的含义. 一.在Java的字符串中"\"有两个功能 (一)代表特殊字符:\t代表制表符,\n代 ...
最新文章
- 事半功倍系列 javascript
- NSThread创建线程的三种方法
- 7个你不知道的WP7开发工具
- 用BluePrint进行Web页面设计
- [kubernetes] 解决k8s.gcr.io Image 导入导出 等问题
- cad怎么设置线的粗细_CAD软件中怎么设置CAD线宽?
- rsync 3.1.1源代码编译安装配置
- find()matlab,Matlab 之 find()函数
- 记录——《C Primer Plus (第五版)》第十章编程练习第十题
- 三校生高考计算机专业试题,三校生高考计算机试卷1
- iai控制器服务器ON信号,IAI电缸产品控制方法的知识.pdf
- SSM+MySQL实现在线考试系统(含源码、MySQL、文档,包运行)
- 2021电赛F题智能送药小车程序代码
- 实验四——反汇编工具的使用
- 数据分析入门必备基础知识
- 南京ibm戴尔笔记本维修
- 中公教育12月04日内外盘分析
- 罗素156句名言:人之所以有道德,是因为受到的诱惑还不够大
- 运动世界校园 校园跑 不想跑步人的福利
- 一维码EAN 13简介及其解码实现(zxing-cpp)