读《精通正则表达式》:标准量词是匹配优先的
正则字符:^.*([0-9]+)
待测字符:Copyright2003.
这个表达式的本意是捕获整个数字'2003',但结果并非如此。
为了满足"[0-9]+"的匹配,".*"必须交还一些字符。在这个例子中,释放的字符是"3."(即最后的"3"和点号),之后"3"能够由"[0-9]"匹配。
"[0-9]"由"+"量词修饰,所以现在还只做到了最小的匹配可能,现在它遇到了".",找不到其它可以匹配的字符。此时没有"必须"匹配的元素(已经满足了'[0-9]+'的匹配要求,后面没有更多的子表达式需要去匹配文本),所以".*"不会被迫交出0。
否则,"[0-9]+"应当心存感激,接受匹配优先元素的馈赠,但请记住"先来先服务"原则(在这里相当于:'Copyright200'已经被'.*'匹配,就不能再把数字'200'让'[0-9]+'去匹配了,因为'3'已经满足了'[0-9]+')。
匹配优先的结构只会在被迫的情况下交还字符(比如将'[0-9]+'改为'[0-9]{2,}',因为一个'3'不能满足,所以此时需要交还一个'0')。所以,最终$1(即第一个分组)的值是"3"。
相关推荐
wangzhaotongalex 2020-10-20
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13
duanqingfeng 2020-09-29
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
phphub 2020-09-10
taomengxing 2020-09-07
MaggieRose 2020-08-19
flyingssky 2020-08-18
山水沐光 2020-08-18
jyj00 2020-08-15
AHuqihua 2020-08-09
山水沐光 2020-08-03