以下内容对我来说似乎相同,但它们给出了不同的结果:
$perl -e ' my $pop = 298444215; $pop =~ s/(?<=\d)(?=(\d\d\d)+$)/,/g; print $pop,"\n"' 298,444,215 $perl -e ' my $pop = 298444215; $pop =~ s/(?<=\d)(?=(\d\d\d)+)/,/g; print $pop,"\n"' 2,9,8,4,215
$确保在匹配的位置前面有三位数字.
这样匹配只会在那些位置(插入空格以便澄清):
3 3 v---v v---v 2 9 8 4 4 4 2 1 5 ^ ^
其他位置不匹配,因为直到结束时3组中没有数字.
例如.这里不符合:
3 3 2 v---v v---v 2 9 8 4 4 4 2 1 5 ^
因为有2组3然后它不能匹配行尾或另一组3位数.
但如果没有$,前瞻在更多位置匹配:
2 9 8 4 4 4 2 1 5 ^
在这里,后视是满意的,前瞻也是如此,因为前面至少有一组3位数,是:
2 9 8 4 4 4 2 1 5 ^---^
前瞻在这里很满意,不需要比这更好.
这当然意味着随后的每个其他位置也会匹配,直到匹配几乎结束:
2 9 8 4 4 4 2 1 5 ^
在这里,它无法匹配,因为前面只有2位数.