gpt4 book ai didi

regex - 在 Perl 代码中改进(优化)现有字符串替换的任何建议?

转载 作者:行者123 更新时间:2023-12-04 23:08:37 26 4
gpt4 key购买 nike

珀尔 5.8

在现有 Perl 脚本中对相当简单的字符串替换进行了改进。
代码的意图很明确,代码正在运行。

对于给定的字符串,用单个空格替换每个出现的 TAB、LF 或 CR 字符,并用两个双引号替换每个出现的双引号。这是现有代码的一个片段:

# replace all tab, newline and return characters with single space
$val01 =~s/[\t\n\r]/ /g;
$val02 =~s/[\t\n\r]/ /g;
$val03 =~s/[\t\n\r]/ /g;

# escape all double quote characters by replacing with two double quotes
$val01 =~s/"/""/g;
$val02 =~s/"/""/g;
$val03 =~s/"/""/g;

问题:有没有更好的方法来执行这些字符串操作?

通过“更好的方式”,我的意思是更有效地执行它们,避免使用正则表达式(可能使用 tr/// 来替换制表符、换行符和 lf 字符),或者可能使用( qr// )来避免重新编译。

注意:我已经考虑将字符串操作操作移到子程序中,以减少正则表达式的重复。

注意:此代码有效,并没有真正损坏。我只想知道是否有更合适的编码约定。

注意:这些操作在循环中执行,大量 (>10000) 次迭代。

注意:此脚本当前在 perl v5.8.8 下执行。 (脚本有一个 require 5.6.0 ,但这可以更改为 require 5.8.8 。(安装更高版本的 Perl 目前不是生产服务器上的选项。)

> perl -v
This is perl, v5.8.8 built for sun4-solaris-thread-multi
(with 33 registered patches, see perl -V for more detail)

最佳答案

您现有的解决方案对我来说看起来不错。

至于避免重新编译,您无需担心。 Perl 的正则表达式只按原样编译一次,除非它们包含内插表达式,而您的则没有。

为了完整起见,我应该提到,即使存在内插表达式,您也可以通过提供 /o 告诉 Perl 编译正则表达式一次。旗帜。

$var =~ s/foo/bar/;    # compiles once
$var =~ s/$foo/bar/; # compiles each time
$var =~ s/$foo/bar/o; # compiles once, using the value $foo has
# the first time the expression is evaluated

关于regex - 在 Perl 代码中改进(优化)现有字符串替换的任何建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5670716/

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