gpt4 book ai didi

regex - 为什么前瞻(有时)比捕获快?

转载 作者:行者123 更新时间:2023-12-04 12:42:03 25 4
gpt4 key购买 nike

这个问题的灵感来自 this other one .

比较 s/,(\d)/$1/s/,(?=\d)// : 前者使用捕获组仅替换数字而不替换逗号,后者使用前瞻来确定逗号是否后接数字。为什么后者有时更快,如 this answer 中所述?

最佳答案

这两种方法做不同的事情并且有不同种类的间接成本。捕获时,perl 必须复制捕获的文本。前瞻匹配而不消耗;它必须标记它开始的位置。您可以使用 re 'debug' 查看发生了什么。附注:

use re 'debug';
my $capture = qr/,(\d)/;
Compiling REx ",(\d)"Final program:   1: EXACT  (3)   3: OPEN1 (5)   5:   DIGIT (6)   6: CLOSE1 (8)   8: END (0)anchored "," at 0 (checking anchored) minlen 2 Freeing REx: ",(\d)"
use re 'debug';
my $lookahead = qr/,(?=\d)/;

编译 REx ",(?=\d)"
最终程序:
1:精确 (3)
3:IFMATCH[0] (8)
5:数字 (6)
6: 成功 (0)
7: 尾部 (8)
8: 结束 (0)
anchor 定“,”在 0(检查 anchor 定) minlen 1
释放 REx: ",(?=\d)"

在大多数情况下,我希望前瞻比捕获更快,但正如其他线程中所述,正则表达式性能可能取决于数据。

关于regex - 为什么前瞻(有时)比捕获快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13682758/

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