关于"匹配优先"和"忽略优先"

[color=green][size=large]为了更好的理解“匹配优先”和“忽略优先”我们可以这样定义:
“匹配优先”可以理解为“贪婪匹配”或“非懒惰匹配”;
“忽略优先”可以理解为“非贪婪匹配”或“懒惰匹配”;[/size][/color]

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

[color=green][size=large]一、匹配优先[/size][/color]
[color=olive]字 串:[/color]
<B>Billions</B> and <B>Zillions</B> of

[color=olive]表达式:[/color]
<B>.*</B>

[color=olive]结 果:[/color]
<B>Billions</B> and <B>Zillions</B>

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

[color=green][size=large]二、忽略优先[/size][/color]
[color=olive]字 串:[/color]
<B>Billions</B> and <B>Zillions</B> of

[color=olive]表达式:[/color]
<B>.*?</B>

[color=olive]结 果:[/color]
<B>Billions</B>
<B>Zillions</B>
[color=olive]描 述:[/color]
[size=large]开始的<B>匹配之后,.*?首先决定不需要匹配任何字符,因为它是忽略优先的。
于是,控制权交给后面的‘<’符号:
此时‘<’无法匹配‘B’,所以控制权交还给.*?则成功匹配‘B’。
此时.*?又必须选择,是继续尝试匹配,还是忽略?因为它是忽略优先的,会首先选择忽略。
接下来‘<’仍然无法匹配‘i’,所以控制权又再一次的交由.*?成功匹配后再交由‘<’,……这样继续直到‘<’匹配成功。
此时位置为<B>后第一次出现</B>的位置。
这样就出现了两个成功匹配结果<B>Billions</B>和<B>Zillions</B>[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值