Perl正则如何匹配字符串中最后出现的11位连续数字?
Perl提取字符串最后一个11位连续数字的修改方案
方法1:贪婪匹配(最简实现,仅需最后一个结果时推荐)
利用Perl正则中.*的贪婪特性,优先匹配尽可能长的前缀内容,剩下部分命中的第一个11位数字就是整串最后一个符合要求的结果,代码修改如下:
if ($content =~ /.*([0-9]{11})/) { my $digits = $1; }
以你给出的示例字符串hdjf95724555199361测试,上述代码会正确提取到结果24555199361。
方法2:全局匹配后取末尾元素(需要留存所有匹配结果时推荐)
如果业务需要同时拿到所有命中的11位数字,可以用全局匹配符g把所有结果存入数组,再取数组最后一位即可:
# 提取所有符合要求的11位数字存入数组 my @all_matches = $content =~ /([0-9]{11})/g; if (@all_matches) { # 取数组最后一个元素即为最后出现的11位数字 my $last_digits = $all_matches[-1]; }
内容的提问来源于stack exchange,提问作者gatorreina
相关产品推荐
相关产品推荐

