这两种方法做不同的事情并且有不同类型的管理成本。当您捕获时,perl 必须复制捕获的文本。前瞻匹配,无需消耗;它必须标记它开始的位置。您可以使用re 'debug'
pragma 查看发生了什么:
use re 'debug';
my $capture = qr/,(\d)/;
Run Code Online (Sandbox Code Playgroud)
编译 REx ",(\d)" 最终计划: 1:准确 (3) 3:打开1 (5) 5:数字 (6) 6:关闭1 (8) 8:结束(0) 锚定“,”在 0(检查锚定) minlen 2 释放 REx: ",(\d)"
use re 'debug';
my $lookahead = qr/,(?=\d)/;
Run Code Online (Sandbox Code Playgroud)
编译 REx ",(?=\d)" 最终计划: 1:准确 (3) 3:IFMATCH[0] (8) 5:数字 (6) 6: 成功 (0) 7:尾巴 (8) 8:结束(0) 锚定“,”在 0(检查锚定) minlen 1 释放 REx: ",(?=\d)"
在大多数情况下,我希望前瞻比捕获更快,但正如其他线程正则表达式中所述,性能可能取决于数据。
归档时间: |
|
查看次数: |
394 次 |
最近记录: |