零度非安全 发表于 2017-2-8 22:47:17

【Java正则表达式】01. 量词、贪婪与非贪婪模式

本帖最后由 零度非安全 于 2017-2-9 15:29 编辑

在 上一讲,嗯~~非安全给大家介绍了 Java 正则表达式的普通字符、标准字符以及自定义字符集合。在上节还有 2

个地方需要补充,那么,我就在这节为大家做个说明。哪 2 个地方呢?第一是正则表达式的特殊符号(它们有特殊的含

义),如果它们被包含在中括号中,那么这些特殊符号将失去特殊意义,但是,除了“ ^ ”和“ - ”这两个符号之外。

第二个就是在标准字符集合里除了小数点“ . ”外其它若包含在中括号内,那么自定义字符集合将包含该集合,举个栗

子,比如正则表达式“[\d]”,它还是匹配 0~9 任意字符,也就是说,它还是包含“\d”这个集合。那好,正则表达式

“ . ”和“[.]”呢?请鱼油们自行尝试,多动动手。

好,补充呢就补充到这里,接下来非安全要正式讲下 Java 正则表达式中的量词、贪婪模式以及非贪婪模式,请大家系好

安全带,以免翻车对您造成伤害。

Java 正则表达式里的量词是用来修饰匹配次数的特殊符号,下面由我给大家整理了下


量词表达的含义
{n}表达式重复 n 次
{m,n}表达式至少重复 m 次,最多重复 n 次
{m,}表达式至少重复 m 次
?匹配表达式 0 次或者 1 次,相当于 {0,1}
+表达式至少出现 1 次,相当于 {1,}
*表达式不出现或出现任意次,相当于 {0,}

我在这就拿标准字符集合中的“\d”来做测试,你还记得“\d”的意思吗?没错,它是用来匹配 0~9 任意数字字符。



如果我们要匹配连续 2 个数字怎么办?你也许会说,这还不好办,“\d\d”,对,没错,这确实可以,我就听你的,如下



那如果我们要连续匹配 3 个、6个、10 个甚至更多,你不可能有几个你就连续输入几个“\d”,那岂不很长,那么量词在

这个时候就有用了,比如说要连续匹配 6 个数字,按照上述表格给的,可以这么写正则表达式“\d{6}”,还是测试一下吧



如果手抖不小心多打了个“\d”,即“\d\d{6}”那会怎么样?,我们还是用事实来说话(焦点访谈),如下


咦{:5_94:} 不对呀,明明可以连续匹配 12 个数字字符,怎么匹配只有 7 个 ,我真是日了狗了, 想知道答案吗?回复“朕想知道”{:10_298:} 获取隐藏内容{:10_336:} 。

我们再来看下第二个量词,我们不妨在正则表达式编辑区里输入“\d{3,6}”,看下有什么效果?我自己也试了下。



按照表格给的含义,至少 3 个,最多 6 个,这些都在上图已经反映了,你可以想象有一条蛇,有 3 个我就先吃 3 个,若后

面还有,我再吃,那这条蛇就非常的贪婪了,所以引出了贪婪模式(匹配的字符越多越好),这个模式也是默认的模式,记

住,是默认的。相反,非贪婪模式是匹配的字符越少越好,怎么体现非贪婪模式呢?那就是在修饰匹配的次数的特殊符号后

面加上一个“ ? ”这个符号就可以了,我们再来测试一遍吧,如下



当然这个“ ? ”符号不是上述表格给的那个单独“ ? ”,这个两个“ ? ”意义是不一样的,例如“\d?”和“\d{0,1}”这两

个的意思是相同的,嗯~~这个你们就自己测试下,在这里就不测试了,我们接下来看下第 3 个量词,按照给的含义,我们

输入“\d{4,}”,我再将其测试,如下



实践是检验真理的唯一性,它心领意会地将其含义给匹配出来了,至少连续匹配 4 个字符,如果有的鱼油错误的输入

了“\d{,4}”,那会出现什么结果?这个也留给你们自己去测试,答案会在隐藏内容内揭晓。

对于量词“ * ”,我也不在这举栗子测试了,为了锻炼你们,自己操刀能解决问题何不美好呢?毕竟原理我已经给出来了

下一节我们来探讨字符边界匹配及匹配模式问题。

【Java正则表达式】02. 探讨字符边界匹配及匹配模式问题


**** Hidden Message *****

CatC 发表于 2017-2-21 18:04:47

tanks!

零度非安全 发表于 2017-2-21 18:40:27

CatC 发表于 2017-2-21 18:04
tanks!

非常有用哟!

丶光明哥 发表于 2017-2-22 16:37:36

学习学习

零度非安全 发表于 2017-2-22 17:30:11

丶光明哥 发表于 2017-2-22 16:37
学习学习

欢迎 、光明哥前来学习!!!

鱼尾 发表于 2017-3-9 17:05:49

想知道

sunnychou 发表于 2017-3-16 15:35:29

朕想知道

zhaosir 发表于 2017-5-23 15:35:09

量词、贪婪与非贪婪模式

阿Rui 发表于 2017-8-4 22:43:06


参与/回复主题
关闭
RE: 【Java正则表达式】01. 量词、贪婪与非贪婪模式 [修改]
高级模式
B
Color
Image
Link
Quote
Code
Smilies
本版积分规则
参与/回复主题

HongY 发表于 2017-8-10 10:28:01

真想知道

HongY 发表于 2017-8-10 10:29:33

真想知道

Ilovefishc110 发表于 2017-8-28 07:57:10

朕想知道

黑白色的枫 发表于 2017-10-2 11:59:06

朕想知道{:10_256:}

guan顺顺 发表于 2018-5-24 09:10:07

emmmmmm

jianglb 发表于 2018-6-25 10:53:11

很好学习

JASONDONG 发表于 2018-11-10 22:18:17

不错不错

super6415498 发表于 2018-11-22 19:40:06

学习学习

ZERODIGDARK 发表于 2019-4-8 10:49:08

{:10_279:}{:10_279:}{:10_279:}看看

熊宝宝要当红军 发表于 2019-10-6 15:38:01

谢谢老师

情缘丶夜未央 发表于 2020-7-22 17:06:30

{:5_102:}
页: [1] 2
查看完整版本: 【Java正则表达式】01. 量词、贪婪与非贪婪模式