gpt4 book ai didi

regex - 行尾如何影响这里的正则表达式?

转载 作者:行者123 更新时间:2023-12-02 09:39:10 32 4
gpt4 key购买 nike

以下对我来说似乎相同,但它们给出了不同的结果:

$ 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,4,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
^

这里,lookbehind 得到满足,lookahead 也满足,因为前面至少有一组 3 位数字,即:

2 9 8 4 4 4 2 1 5
^---^

这里的前瞻已经满足,不需要匹配更多。

这当然意味着后面的所有其他位置也将匹配,直到匹配即将结束:

2 9 8 4 4 4 2 1 5
^

在这里,它无法匹配,因为前面只有 2 位数字。

关于regex - 行尾如何影响这里的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21502903/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com