注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ㄨiao愛

转载技术文档

 
 
 

日志

 
 

“匹配优先”和“忽略优先”  

2012-03-18 21:18:38|  分类: 正则 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
为了更好的理解“匹配优先”和“忽略优先”我们可以这样定义:
“匹配优先”可以理解为“贪婪匹配”或“非懒惰匹配”;
“忽略优先”可以理解为“非贪婪匹配”或“懒惰匹配”;


强调一点:表达式cat不是匹配以cat开头的字串。而是匹配一个c,再匹配一个a,最后匹配一个t。Jeffrey E.F.Friedl这样告诉我们。

一、匹配优先
字  串:     
Sourcestring代码  收藏代码
  1. <B>Billions</B> and <B>Zillions</B> of  

表达式:     
Regex代码  收藏代码
  1. <B>.*</B>  

结  果:      
Resultstring代码  收藏代码
  1. <B>Billions</B> and <B>Zillions</B>  

描  述:
         匹配优先时.*只从自身出发,匹配尽可能多的内容,只有在全局匹配需要的情况下才会“被迫”交还一些字符。
     在最开始的<B>匹配之后,.*能够匹配任何字符,所以它会一直匹配到字符串的末尾。
     为了让最后的</B>能够匹配,.*会不断交还字符(或者,更确切的说,是正则引擎强迫它回退),顺序:‘>’、‘B’、‘/’、‘<’直到满足‘<’匹配为止。


二、忽略优先
字  串:     
Sourcestring代码  收藏代码
  1. <B>Billions</B> and <B>Zillions</B> of  

表达式:     
Regex代码  收藏代码
  1. <B>.*?</B>  

结  果:      
Resultstring代码  收藏代码
  1. <B>Billions</B>  
  2. <B>Zillions</B>  
描  述:
        开始的<B>匹配之后,.*?首先决定不需要匹配任何字符,因为它是忽略优先的。
    于是,控制权交给后面的‘<’符号:
    此时‘<’无法匹配‘B’,所以控制权交还给.*?则成功匹配‘B’。
    此时.*?又必须选择,是继续尝试匹配,还是忽略?因为它是忽略优先的,会首先选择忽略。
    接下来‘<’仍然无法匹配‘i’,所以控制权又再一次的交由.*?成功匹配后再交由‘<’,……这样继续直到‘<’匹配成功。
    此时位置为<B>后第一次出现</B>的位置。
    这样就出现了两个成功匹配结果<B>Billions</B>和<B>Zillions</B>

http://njm.iteye.com/blog/657536
  评论这张
 
阅读(293)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017