Java的正则表达式相关的类位于 java.util.regex 包中;

这个包中只有一个 MatchResult 接口和 Matcher、Pattern 两个类;

有关正则表达式的使用请参考Java API.

本文只是简单的介绍正则表达式中的数量词,并举例说明其区别.

正则表达式中的数量词有: 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());
}
输出:

因为贪婪但并不聪明,故称强占.

本文转载自:http://blog.csdn.net/zfq642773391/article/details/5506618

java正则表达式中的数量词介绍及区别相关推荐

  1. java正则表达式中的数量词

    java中的正则位于java.util.regex包中,这个包中只有一个MatchResult接口和Matcher.Pattern两个类. 正则中的数量词有Greedy (贪婪).Reluctant( ...

  2. 关于Java正则表达式中转义符“\\”的使用

    一.前言 在复习到正则表达式这一部分的内容时,我注意到Java中要想使用转义符必须要用双反斜杠来达到其他语言中单反斜杠的效果,出于对这个问题的好奇我查阅了一些资料,并初步了解了Java正则表达式中转义 ...

  3. Java正则表达式中的反向引用

    Java正则表达式中的反向引用是Java提供的另一个重要功能. 要了解反向引用 ,我们首先需要了解群组 . 正则表达式中的分组意味着将多个字符视为一个单元. 通过将要分组的字符放在一组括号" ...

  4. Java正则表达式中的捕获组的概念及相关API使用

    要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对"()"分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次 ...

  5. 正则表达式中[A-z]和[a-zA-Z]的区别

    正则表达式中[A-z]和[a-zA-Z]的区别 正则表达式中[A-z]和[a-zA-Z]的范围是不一样的,先来看一下ASCII表 1.当输入[A-z],匹配的是如下字符 2.输入[a-zA-Z]时,匹 ...

  6. java pattern matches,Java正则表达式中的Pattern.matches()方法

    java.util.regex.Pattern.matches()方法匹配正则表达式和给定的输入.它有两个参数,即正则表达式和输入.如果正则表达式和输入匹配,则返回true,否则返回false. 给出 ...

  7. 二十三、Java类中重载和重写的区别

    @Author:Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...

  8. Java 正则表达式中为什么反斜杠“\“需要用“\\\\”表示

    正则表达式语法 在其他语言中,\\(两个斜杠) 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义. 在 Java 中,\\ (两个斜杠)表示:我要插入一个正则表达式 ...

  9. Java泛型中extends和super的区别?

    区别 <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概 ...

最新文章

  1. 解决Selenium与firefox浏览器版本不兼容问题
  2. zencart 1.5.4 安装问题
  3. python下载地址
  4. Verilog功能模块——降采样
  5. 团购、定时抢购倒计时js版
  6. 惯性制导精度是多少_我国东风41精度凭啥第一?激光陀螺仪不算啥,太空水漂才真厉害...
  7. Django从理论到实战(part32)--外键删除
  8. 排序算法python版本
  9. 最简单的Jdbc连接Oracle代码
  10. android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法
  11. AirFlow常见问题汇总
  12. Java基础面试题,啾啾啾~~~
  13. java对象模型 指令_JVM-Java内存模型-20200217(示例代码)
  14. 51多项式06——复系数和实系数多项式
  15. 数值分析(10)-数值微分
  16. java7 3dm下载_3DM游戏运行库合集安装包v2.8
  17. 网络传输大文件使用什么软件可以高速传输?
  18. 计算机音乐咱们结婚吧音乐谱,齐晨咱们结婚吧简谱_咱们结婚吧歌词
  19. 个人网站如何开通收款功能申请支付接口?
  20. 过QQ游戏大厅的SX保护

热门文章

  1. python竞赛试题及答案_用Python来解一道华罗庚数学竞赛试题
  2. 当前最流行的报表工具
  3. 深圳达内培训python学费
  4. Windows server 2003 怎么安装ACHI驱动?
  5. Git Submodule简单使用
  6. 英语单词打卡软件测试,那些在朋友圈疯狂晒英语打卡的人,后来都怎么样了?...
  7. 如何制作污水处理流程图?简单方式说明
  8. 伪装计算机主机,位置伪装大师电脑版
  9. 红米K30S Ultra的root步骤 之二(MIUI 13.0.1 稳定版 安卓12)
  10. 06 案例 - 赌球神器