如何使用特定次数搜索和替换匹配项s///;.例如:
$string="abcabdaaa";
Run Code Online (Sandbox Code Playgroud)
我想,以取代a与i在$stringn次.我怎样才能做到这一点?n是用户提供的整数.
简单的答案可能并不是你想要的.
my $str = 'aaaa';
$str =~ s/a/a_/ for 1..2;
print $str, "\n"; # a__aaa. But you want a_a_aa, right?
Run Code Online (Sandbox Code Playgroud)
您需要自己计算替换数,并采取相应措施:
$str = 'aaaa';
my $n = 0;
$str =~ s/(a)/ ++$n > 2 ? $1 : 'a_' /ge;
print $str, "\n";
Run Code Online (Sandbox Code Playgroud)
请参阅常见问题解答,如何更改第N次出现的内容?相关的例子.
只需替换$ n次:
$string =~ s/a/i/ for 1..$n;
Run Code Online (Sandbox Code Playgroud)
这样做.
更通用的解决方案是用计数器进行全局替换:
my $i = 0; # count the substitutions made
$string =~ s/(a)/ ++$i > $n ? $1 : "i" /ge;
Run Code Online (Sandbox Code Playgroud)