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

前端之家收集整理的这篇文章主要介绍了线端如何影响正则表达式?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下内容对我来说似乎相同,但它们给出了不同的结果:
$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位数.

猜你在找的正则表达式相关文章