正则表达式中+在捕获组内外的差异及匹配问题咨询
正则表达式捕获组与量词位置的差异解析
两个正则的核心差异
第一个正则:
num=(\d)+$
这里的量词+是作用在捕获组(\d)之外,逻辑是匹配「单个数字的捕获组」重复1次或多次。
正则引擎处理时,每重复一次捕获组,就会用新匹配到的数字覆盖之前捕获组的内容。哪怕整个表达式匹配了所有末尾数字(比如829),捕获组最终只保留最后一次匹配的结果——也就是最后一位数字9。第二个正则:
num=(\d+)$
这里的量词+是作用在捕获组内部的\d上,逻辑是捕获组直接匹配「连续的1个或多个数字」。整个连续数字序列会被一次性匹配并存入捕获组,不会出现内容覆盖,所以能拿到完整的页码829。
为什么最初匹配到的是最后一位而非第一位?
正则引擎的贪婪匹配会让(\d)+尽可能匹配所有末尾数字,但捕获组的特性是:每次重复捕获组时,都会更新捕获组的内容。比如匹配num=829时,捕获组会依次被8、2、9覆盖,最终留存的是最后一次匹配的结果,而非第一次。
内容的提问来源于stack exchange,提问作者Domarius
相关产品推荐
相关产品推荐

