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

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

发布时间:2020-12-15 23:21:54 所属栏目:大数据 来源:网络整理
导读:Perl 5.8 在现有的Perl脚本中对相当简单的字符串替换的改进. 代码的意图很明确,代码正在运行. 对于给定的字符串,将每个出现的TAB,LF或CR字符替换为单个空格,并用双引号替换每个双引号.这是现有代码的片段: # replace all tab,newline and return characters
Perl 5.8

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

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

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

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

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

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

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

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

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

注意:此脚本当前在perl v5.8.8下执行. (该脚本具有require 5.6.0,但可以将其更改为要求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

(编辑:李大同)

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

    推荐文章
      热点阅读