加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 22:56:19 所属栏目:百科 来源:网络整理
导读:以下内容对我来说似乎相同,但它们给出了不同的结果: $perl -e ' my $pop = 298444215; $pop =~ s/(?=d)(?=(ddd)+$)/,/g; print $pop,"n"' 298,444,215 $perl -e ' my $pop = 298444215; $pop =~ s/(?=d)(?=(ddd)+)/,/g; print $pop,"n"' 2,9,8,4,
以下内容对我来说似乎相同,但它们给出了不同的结果:
$perl -e '  
my $pop = 298444215;  
$pop =~ s/(?<=d)(?=(ddd)+$)/,/g;   
print $pop,"n"'  
298,444,215  

$perl -e '  
my $pop = 298444215;  
$pop =~ s/(?<=d)(?=(ddd)+)/,/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位数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读