【正则表达式入门】第三节——重复匹配

在上一节中,介绍了元字符的概念。在这一节中,介绍重复匹配的概念,通过将元字符与重复匹配的语法结合,可以实现对多个字符、段落等的匹配。

匹配一个或多个字符

+ 作为一个字符、或者字符集合的后缀,来匹配一个或多个连续出现的字符。
例如
[0-9]+ 表示匹配1个数字,或者多个数字。
a+ 表示匹配1个字母,或者多个字母。

在这里插入图片描述

根据上图结果显示,cat.+ 匹配到了以cat开头的字符串。

匹配零个或多个字符

* 作为一个字符、或者字符集合的后缀,来匹配零个或多个连续出现的字符。
例如
[0-9]* 表示匹配0个数字,或者多个数字。
a* 表示匹配0个字母,或者多个字母

在这里插入图片描述

cat_*[\d]+@qq.com 表示匹配cat开头,包含零个或者1个下划线_,包含至少一个数字的qq邮箱。

根据上图显示,该正则表达式匹配到了预想的结果。

匹配零个或一个字符

? 作为一个字符、或者字符集合的后缀,表示只能匹配零次或者一次。

上一个案例中,针对含有下划线的邮箱,可以采用下面的正则表达式。
cat_?[\d]+@qq.com

在这里插入图片描述

根据上图显示,该正则表达式同样匹配到了预想的结果。

设定准确重复匹配次数

由于 +* 匹配的个数没有上限,而使用 ? 最少也只能匹配0个或者1的个数。为解决对匹配次数的准确控制,正则表达式提供了重复次数的操作。

{}包含数字的语法结构,来匹配设定数字的重复匹配次数。

在这里插入图片描述

正则表达式cat[\d]{2}表示匹配cat开头,后面只有两个数字的字符串。

由上图显示,该正则表达式匹配到了全文中,唯一的cat12字符串。

设定区间重复匹配次数

{a , b}包含数字a与数字b的语法结构,表示重复匹配次数最小值a与最大值b,表示最少匹配a次,最多匹配b次。

在这里插入图片描述

正则表达式cat[\d]{2,3}表示匹配cat开头,后面只有两个数字或者三个数字的字符串。
根据上图显示,该正则表达式匹配到了全文中的cat12、cat123字符串。

设定只有最小值的重复匹配次数

{a , }包含数字a的语法结构,表示重复匹配次数最小值a,表示最少匹配a次。

在这里插入图片描述

正则表达式cat[\d]{2,}表示匹配cat开头,后面至少有两个数字的字符串。
根据上图显示,该正则表达式匹配到了全文中的cat12、cat1234字符串。

防止过度匹配

在使用.字符以及*等贪婪型元字符时来匹配时,会发生匹配过渡的情况。

在这里插入图片描述

正则表达式<cat>.*</cat>在匹配时,将两个<cat>.*</cat>之间的ads也匹配成在了一起。即发生了过度匹配的情况。

在这种情况下,应该使用对应的懒惰型元字符来抵消其贪婪行。
贪婪型元字符 * 的懒惰型元字符 *?
贪婪型元字符 + 的懒惰型元字符 +?
贪婪型元字符 {n, } 的懒惰型元字符 {n, }?

对上面的正则表达式进行修改,改为<cat>.*?</cat>
在这里插入图片描述

根据上图可以看出,这次的正则表达式准确的匹配到了设想的结果。

「参考」
《正则表达式必知必会》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值