替换perl中的字符串值

时间:2015-10-07 16:01:20

标签: regex string perl

我有一个如下字符串:

my $testing = 'EmailId=learner.here@stackoverflow.com&passWord=mypassword123';

在我的Perl代码中,我想要做的就是将此值作为输入,并将passWord的值替换为****3(其中3是实际密码的最后一个字符); 最终输出是:

"EmailId=learner.here@stackoverflow.com&passWord=****3"

我能够使用以下方法在Perl中生成如上所示的输出:

my $testing = 'EmailId=learner.here@stackoverflow.com&passWord=mypassword123';
my ( $val, $val1) = split( 'passWord=', $testing );
my $string =  $with_this . substr($val1,length($val1) - 1);
print "\n" . $val . 'passWord=' . $string . "\n";

有人可以帮助我理解这是否正确,或者如何做得更好。 它工作正常,但我仍然应该有一些简单的方法来使用正则表达式或其他东西。

  1. 使代码更好或以更简单的方式执行
  2. 如果实际值没有退出则处理条件
  3. 或任何其他建议
  4. 我是编程的新手,我的研究也是如此,并提出了我上面提到的解决方案。 如果您有任何问题,请告诉我。

2 个答案:

答案 0 :(得分:3)

$testing =~ s/\bpassWord=\K.*(?=.)/****/s;

如果密码不总是在字符串的末尾找到,则需要进行一些调整。例如,以下内容处理密码可以,结束的情况。

$testing =~ s/[&,]passWord=\K[^,]*(?=[^,])/****/s;

答案 1 :(得分:1)

这将使用正确的星号数替换原始值,但最后一个字符除外:

$testing =~ s/passWord=([^&]+)/'passWord=' . ('*' x (length($1) - 1)) . substr($1, -1)/e;