【发布时间】:2018-07-23 12:09:12
【问题描述】:
我有一个函数,其目的是提取在两个分隔符之间找到的子字符串。我会使用正则表达式,但在这种情况下,我有明确的指示不要使用它们。
我有一个更简单、更优雅的解决方案,它只有一行,但我终生无法记住或找到它。
sub findBetween {
my ($theString,$delimiter1,$delimiter2) = (@_);
my $tmp = substr($theString, index($theString,$delimiter1)+length($delimiter1));
$tmp = substr($tmp, 0, index($tmp,$delimiter2));
return $tmp;}
感谢您查看此问题,我知道它非常基本且有些多余。我需要的是一个更简单的解决方案,涉及 perl 基本功能并且没有正则表达式。
【问题讨论】:
-
听听为什么不能使用正则表达式会很有趣?
-
我被提供的原因: - 这些函数所在的脚本正在解析非常大的文件 - 这个函数非常常用 - 在这种情况下,使用没有正则表达式的函数会更快
-
我不确定
substr+ 2 倍index是否比正则表达式匹配操作快。你可以做一个基准来检查它是否真的更快 -
这也是我的想法;基准确实证明是正确的。我不记得具体细节了,但虽然它并没有快几英里,但至少明显快得多(我们说的是一分钟内的秒数)。这就是说,在这种情况下,我确实觉得相关性并不意味着因果关系,从我与软件工程师朋友的讨论中,他们都对这个结果感到惊讶。
-
我运行了benchmark,似乎
substr+index通常比正则表达式匹配更快,但并非适用于所有情况。如果您想进一步提高速度,还可以考虑在 C 中实现findBetween()。