正则中的“贪婪匹配”和“懒惰匹配”

进行正则匹配时,像+  *   ?  以及{M,N}这几种量词(匹配数量)默认是属于贪婪量词,会进行贪婪匹配。

什么叫做贪婪匹配呢?贪婪就是尽可能的多匹配,贪心的意思。
比如现在目标字符串是 AAAA    四个A组成的字符串
A*  和 A+ 都会匹配 AAAA
A? 则会匹配       A
这就是贪婪匹配,实际运用中,有的时候我们却希望尽可能少的匹配
比如目标字符串 <span>a</span><span>b</span>
此时如果我们使用了贪婪量词
<span>.*</span> 则会匹配 <span>a</span><span>b</span> 整个字符串
可是我们只想要匹配第一对span标签怎么办?此时就需要用到懒惰量词,意思也很明显了,能偷懒就偷懒,呵呵,懒惰量词与贪婪量词的差别就是在贪婪量词的后面加个?号,就构成了懒惰量词,如下表
贪婪量词        懒惰量词
A*                         A*?
A+                        A+?
A?                        A??
A{M,N}                  A{M,N}?
还是以目标字符串 AAAA  来讨论
A*?   
*号是匹配0次或多次,要偷懒怎么办呢?当然是最少次数了,也就是0   所以在这里匹配的结果是
没有匹配到任何内容
A+?
+是1次或多次,分析方法同上,最少次数是1次,所以匹配结果就是 A
A??
?是0次或1次,所以这里也不进行匹配,会偷懒吧,呵呵
再来看看刚刚的
<span>a</span><span>b</span>
要匹配第一对span,用懒惰量词就是<span>.*?</span>
我已经说的够明白了吧?这些内容我以前都是查了好多资料才知道的。
正则表达式是相当强大的语言,尤其在进行字符匹配和查找时,当然要需要花一定的时间才能掌握。
 
 从百度贴吧看到转过来,原地地址是:http://zhidao.baidu.com/question/202218777.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值