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

字符串修剪的两种常见正则表达式方法之间的Perl性能是什么?

发布时间:2020-12-14 06:06:28 所属栏目:百科 来源:网络整理
导读:所以我正在研究一个执行大量处理的Perl脚本(没有太复杂,但很多),并决定做一些基准来比较修剪字符串的两种常用方法. 第一种方法是快速单行: $word =~ s/^s+|s+$//g; 第二种方法有点长,但做同样的事情: $word =~ s/^s+//;$word =~ s/s+$//; 对于我的基准
所以我正在研究一个执行大量处理的Perl脚本(没有太复杂,但很多),并决定做一些基准来比较修剪字符串的两种常用方法.

第一种方法是快速单行:

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

第二种方法有点长,但做同样的事情:

$word =~ s/^s+//;
$word =~ s/s+$//;

对于我的基准测试,我从一个包含4000万行的文件中读取脚本,每个行都进行修剪(除此之外什么也没做).平均线长度小于20个字节.

第一种方法平均需要87秒才能完成.
第二种方法平均需要27秒才能完成.
不进行处理(只读线,继续)平均需要16秒.

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

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

解决方法

从某种意义上说,锚定的非回溯模式可以更好地进行优化(实际上是从已知字符位置开始的单个前向/后向顺序扫描);

有可能’选项'(|)使优化器退避,你得到标准的回溯,非常糟糕,因为许多空间可能会发生不拖尾

(编辑:李大同)

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

    推荐文章
      热点阅读