正则表达式匹配次

正则表达式匹配次-贪婪匹配

{n}  表达式固定重复n次,比如:"/w{2}" 相当于 "/w/w"。

{m, n}  表达式尽可能重复 n 次,至少重复 m 次:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"。

{m, }  表达式尽可能的多匹配,至少重复 m 次:"/w/d{2,}"可以匹配 "a12","x456"...。

?  表达式尽可能匹配 1 次,也可以不匹配,相当于 {0, 1}。

+  表达式尽可能的多匹配,至少匹配 1 次,相当于 {1, }。

*  表达式尽可能的多匹配,最少可以不匹配,相当于 {0, }。

示例

abbbbb

正则表达式 b{2,3} 匹配出两个结果:bbbbb

 

正则表达式匹配次-懒惰匹配

懒惰匹配又称非贪婪匹配、勉强匹配。

{m, n}? 表达式尽量只匹配 m 次,最多重复 n 次。

{m, }? 表达式尽量只匹配 m 次,最多可以匹配任意次。

?? 表达式尽量不匹配,最多匹配 1 次,相当于 {0, 1}?。

+? 表达式尽量只匹配 1 次,最多可匹配任意次,相当于 {1, }?。

*? 表达式尽量不匹配,最多可匹配任意次,相当于 {0, }?。

示例

abbbbb

正则表达式 b{2,3}? 匹配出两个结果:bbbb

 

正则表达式匹配次-占有模式

占有模式在某些特定的语言(比如 JAVA)中才有效,并且很少用,所以不必投入太多的关注。

{m, n}+ 表达式尽可能重复 n 次,至少重复 m 次。

{m, }+ 表达式尽可能的多匹配,至少重复 m 次。

?+ 表达式尽可能匹配 1 次,也可以不匹配,相当于 {0, 1}+。

++ 表达式尽可能的多匹配,至少匹配 1 次,相当于 {1, }+。

*+ 表达式尽可能的多匹配,最少可以不匹配,相当于 {0, }+。

可以看出占有模式似乎和贪婪模式很相像,但还是有区别的:

用正则表达式匹配字符串的时候会产生很多中间状态,(一般的匹配引擎会保存这种中间状态,)这样匹配失败的时候就能原路返回了。占有型的表达式不保存这种中间状态,因此也就不会回头重来了。它能防止正则表达式的失控,同时也能提高运行的效率。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值