gpt4 book ai didi

regex - Perl 性能在两种常见的字符串修剪正则表达式方法之间受到影响吗?

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

因此,我正在编写一个执行大量处理的 Perl 脚本(不是太复杂,但很多),并决定做一个小基准来比较两种常用的字符串修剪方法。

第一种方法是快速单线:

$word =~ s/^\s+|\s+$//g;

第二种方法有点长,但做同样的事情:
$word =~ s/^\s+//;
$word =~ s/\s+$//;

对于我的基准测试,我从一个包含 4000 万行的文件中读取了脚本,并对其进行了修剪(除此之外别无他法)。平均行长度低于 20 字节。

第一种方法平均需要 87 秒才能完成。
第二种方法平均需要 27 秒才能完成。
不做任何处理(只是读取行,继续)平均需要 16 秒。

第一种方法(第一遍)将匹配所有前导或尾随空格,然后将其删除,然后匹配并删除另一侧的前导/尾随空格。
第二种方法匹配并删除所有前导空格,然后匹配并删除所有尾随空格。

也许我在这里错了,但是为什么第二种方法比第一种方法快 3 倍以上?

最佳答案

在第一种情况下,正则表达式引擎必须做更多的工作,即回溯以评估替代方案。您可以在所涉及的代码中看到不同之处:

echo " hello " |perl -Mre=debug -ple 's/^\s+|\s+$//g'
echo " hello " |perl -Mre=debug -ple 's/^\s+//;s/\s+$//'

关于regex - Perl 性能在两种常见的字符串修剪正则表达式方法之间受到影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908262/

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