线端如何影响正则表达式?

以下内容对我来说似乎相同,但它们给出了不同的结果:
$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位数.

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) &lt;script ...