[正则表达式]-基础语法二 元字符之限定符与贪婪模式

      相比与第一篇博文中的元字符之定位符来讲,限定符理解起来就比较容易了,但值得注意的是:限定符的作用范围,其作用范围为:位于限定符前面的一个子表达式。这里的子表达式可以是单个字符、转移字符或者是用括号()括起来的子表达式,抑或是中括号[]括起来的字符类。这与字符的运算优先级有关。这里我们用到时会简单说明,并且以后会进行专题讲解。

      限定符有6种,分别是* + ? {n} {n,} {n,m}.

      本篇博文,将对限定符进行介绍,同时也会对限定符的“贪婪模式”与“非贪婪模式”进行讨论记录。需要说明的是:所有限定符默认情况下都是以“贪婪模式”进行匹配的。取消贪婪模式的方法是在限定符后加限定修饰符?

      一、元字符之限定符*

      匹配之前的子表达式0次或多次(≥0)

      例如:^ab*$

      可以匹配的字符串有:a    ab   abb     abbb等首字母为a后接0个或多个b。

      在默认的贪婪模式下,如果使用^ab*$对字符串abbbbbc进行识别,那么匹配出来的是字符串abbbbb而不是ab。原因在于贪婪模式是尽可能的消耗多的字符串。而如果在限定符后加上修饰符?,则使贪婪模式关闭,转变为非贪婪模式。使用^ab*$对字符串abbbbbc进行识别,匹配得到的是字符串a。

      、元字符之限定符+

      匹配之前的子表达式1次或多次(≥1)

      例如:\bab+

      可以匹配的字符串有:ab   abb   abbb等首字母为a后接至少一个b。

      这里默认的依然是贪婪模式,所以如果对字符串abbbbc进行识别,那么匹配出来的是abbbb,而如果使用\bab+?对abbbb进行识别,那么识别出来的将是ab   。

      在对字符串进行识别的时候,贪婪模式总是尽可能多的消耗字符,尽可能的往字符串右侧推进。所以,使用限定符的时候请注意贪婪模式的使用。

      、元字符之限定符?

      匹配之前的子表达式1次或0次

      例如:abc?

      可以匹配的字符串有:ab和abc两个。ab之后无字母或者跟一个c。

      默认为贪婪模式,优先匹配字符abc。abc??为非贪婪模式,优先匹配字符ab

      、元字符之限定符{n}

      匹配之前的子表达式确定次数n次

      例如:ab{3}

      可以匹配的字符串有:abbb。字母a之后跟3个b,共4位。

      在逻辑与功能上讲,{n}限定符的贪婪模式与非贪婪模式没有区别。其前面有n个子表达式的优先级最高,且只有这一种情况。

      、元字符之限定符{n,}

      匹配之前的子表达式至少n次(≥n)

      例如:ab{3,} 

      可以匹配的字符串有:abbb      abbbb     abbbbb 等,字母a之后跟至少3个字母b。{3,}的意思是至少3个。而且有ab{1,0}等价于ab+   ,也有ab{0,}等价于ab*

      在贪婪模式下ab{3,}优先匹配abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb即尽可能多的b。而ab{3,}?则优先匹配abbb

      、元字符之限定符{n,m}

      匹配之前的子表达式至少n次,至多m次(≥n且≤m)

      例如:ab{3,5}

      可以匹配的字符串有:abbb     abbbb     abbbbb三个,字母a之后跟3到5个b。同时应注意ab{3,3}等价于ab{3}

      贪婪模式下优先匹配abbbbb    非贪婪模式下优先匹配abbb     如果要匹配确定数目的字母,请使用限定符{n}  




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值