【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 *****
tanks! CatC 发表于 2017-2-21 18:04
tanks!
非常有用哟! 学习学习 丶光明哥 发表于 2017-2-22 16:37
学习学习
欢迎 、光明哥前来学习!!! 想知道 朕想知道 量词、贪婪与非贪婪模式
参与/回复主题
关闭
RE: 【Java正则表达式】01. 量词、贪婪与非贪婪模式 [修改]
高级模式
B
Color
Image
Link
Quote
Code
Smilies
本版积分规则
参与/回复主题
真想知道 真想知道 朕想知道
朕想知道{:10_256:} emmmmmm 很好学习 不错不错
学习学习 {:10_279:}{:10_279:}{:10_279:}看看 谢谢老师 {:5_102:}
页:
[1]
2