正则表达式优化与Perl正则特性深度解析
正则表达式优化
在处理文本时,正则表达式引擎会快速抓取并移除特殊结构。例如,在一个旧系统上,使用Perl代码移除一个16MB、50万行测试文件中的所有注释大约需要16.4秒。不过,我们可以通过一些方法显著提高其速度。
为了让正则表达式引擎更快地匹配,我们可以引导其注意力。在注释和字符串之间的普通C代码长段中,引擎需要尝试四种替代方案来判断是否应处理某个字符,这会产生大量不必要的工作。我们知道,要使替代方案有匹配的可能,首字符必须是斜杠、单引号或双引号。因此,我们可以添加 [^\'"/] 作为替代方案,由于连续的此类字符可以一次性处理,所以使用 [^\'"/]+ 。
$OTHER = qr{[^"'/]};
$text =~ s/($DOUBLE;$SINGLE;$OTHER+);$COMMENT;$COMMENT2/$1/g;
这样修改后,再次进行基准测试,发现时间减少了超过75%。不过,我们还可以进一步优化:
- 调整顺序 :大多数情况下, $OTHER+ 是最常用的替代方案,所以将其放在括号内的首位。对于传统NFA引擎,一旦找到匹配项就会停止,这样可以避免先检查相对罕见的匹配。
- 添加后续匹配 :在每个引用项匹配后,很可能会接着出现一些 $OTHER 字符。在每个项后添加 $OTHER+ ,可以让
超级会员免费看
订阅专栏 解锁全文
385

被折叠的 条评论
为什么被折叠?



