读《精通正则表达式》:标准量词是匹配优先的

正则字符:^.*([0-9]+)

待测字符:Copyright 2003.

这个表达式的本意是捕获整个数字‘2003’,但结果并非如此。

为了满足“[0-9]+”的匹配,“.*”必须交还一些字符。在这个例子中,释放的字符是“3.”(即最后的“3”和点号 ),之后“3”能够由“[0-9]”匹配。

“[0-9]”由“+”量词修饰,所以现在还只做到了最小的匹配可能,现在它遇到了“.”,找不到其它可以匹配的字符。此时没有“必须”匹配的元素(已经满足了‘[0-9]+’的匹配要求,后面没有更多的子表达式需要去匹配文本 ),所以“.*”不会被迫交出0。

否则,“[0-9]+”应当心存感激,接受匹配优先元素的馈赠,但请记住“先来先服务”原则(在这里相当于:‘Copyright 200’已经被‘.*’匹配,就不能再把数字‘200’让‘[0-9]+’去匹配了,因为‘3’已经满足了 ‘[0-9]+ ’)。

匹配优先的结构只会在被迫的情况下交还字符(比如将‘[0-9]+’改为‘[0-9]{2,}’,因为一个‘3’不能满足,所以此时需要交还一个‘0’ )。所以,最终$1(即第一个分组)的值是“3”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值