如何在Perl中的字符串中搜索和替换特定次数的匹配?

Use*_*611 1 perl

如何使用特定次数搜索和替换匹配项s///;.例如:

$string="abcabdaaa";
Run Code Online (Sandbox Code Playgroud)

我想,以取代ai$stringn次.我怎样才能做到这一点?n是用户提供的整数.

FMc*_*FMc 9

简单的答案可能并不是你想要的.

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次出现的内容?相关的例子.


Eug*_*ash 6

只需替换$ 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)