我有一个如下字符串:
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";
有人可以帮助我理解这是否正确,或者如何做得更好。 它工作正常,但我仍然应该有一些简单的方法来使用正则表达式或其他东西。
我是编程的新手,我的研究也是如此,并提出了我上面提到的解决方案。 如果您有任何问题,请告诉我。
答案 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;