regex – 在Perl代码中改进(优化)现有字符串替换的任何建议?
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |