当前位置:  开发笔记 > 编程语言 > 正文

如何在保留原始字符串的同时对字符串执行Perl替换?

如何解决《如何在保留原始字符串的同时对字符串执行Perl替换?》经验,为你挑选了4个好方法。

在Perl中,使用正则表达式对字符串执行替换并将值存储在另一个变量中而不更改原始值的好方法是什么?

我通常只是将字符串复制到一个新变量,然后将其绑定到正在s///替换新字符串的正则表达式,但我想知道是否有更好的方法来做到这一点?

$newstring = $oldstring;
$newstring =~ s/foo/bar/g;

John Siracus.. 242

这是我用来获取字符串的修改副本而不更改原始字体的习语:

(my $newstring = $oldstring) =~ s/foo/bar/g;

在perl 5.14.0或更高版本中,您可以使用新的/r 非破坏性替换修饰符:

my $newstring = $oldstring =~ s/foo/bar/gr; 

注意:上述解决方案也没有g.它们也适用于任何其他修饰符.



1> John Siracus..:

这是我用来获取字符串的修改副本而不更改原始字体的习语:

(my $newstring = $oldstring) =~ s/foo/bar/g;

在perl 5.14.0或更高版本中,您可以使用新的/r 非破坏性替换修饰符:

my $newstring = $oldstring =~ s/foo/bar/gr; 

注意:上述解决方案也没有g.它们也适用于任何其他修饰符.


是否使用严格.变量的最小范围++
@Benoit,我相信你的意思是`s/foo/bar /我的$ newstring = $ oldstring;`它有效,但它更奇怪了.

2> Pat..:

该声明:

(my $newstring = $oldstring) =~ s/foo/bar/g;

这相当于:

my $newstring = $oldstring;
$newstring =~ s/foo/bar/g;

或者,从Perl 5.13.2开始,您可以使用/r非破坏性替换:

use 5.013;
#...
my $newstring = $oldstring =~ s/foo/bar/gr;


你忘了顶级正则表达式中的`g`了吗?

3> Sam Kington..:

use strict,说:

(my $new = $original) =~ s/foo/bar/;

代替.



4> 小智..:

单线解决方案作为一个shibboleth比良好的代码更有用; 好的Perl程序员会知道它并理解它,但它比你刚开始的两行复制和修改联接更不透明和可读.

换句话说,这样做的好方法就是你已经这样做了.以可读性为代价的不必要的简洁并不是一个胜利.


这样做了.以可读性为代价的不必要的简洁并不是一个胜利.
您可能认为这是不必要的简洁,但必须输入两次变量名称才能使用它一次是失败点数的两倍.对于熟悉该语言的人来说,它是完全可读的,甚至在我们的 Learning Perl 课程中也是如此.
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有