如何使用正则表达式限制perl上找到的匹配?

isJ*_*tMe 7 regex perl

经过对此事的大量研究后,我来请求你的帮助:

我试图限制Perl正则表达式对大文本执行的替换的重复.我在谷歌搜索过,发现格式为{2,3}(最小值,最大值),但这似乎与我正在使用的语法不同.

$replaced=~s/$var/$var2/g; # replaces all ocurrences
$replaced=~s/$var/$var2/;  # replaces only first one
Run Code Online (Sandbox Code Playgroud)

我的非最佳解决方案:

for($i=0; $i<8; $i++){

    $replaced=~s/$var/$var2/;
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

$replaced=~s/$var/$var2/{8};
$replaced=~s/$var/$var2{8}/;
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

编辑:好的,所以几乎必须有一个循环涉及... ..是不是很奇怪没有内置参数来限制它?

hob*_*bbs 7

答案\G可能是最实用的方式来做你想要的,但只是为了娱乐或启发或其他什么,这是另一种方式(需要perl 5.10或更高),使用代码断言和回溯控制动词 (*COMMIT)(*FAIL):

my $str = "Bananas in pajamas are coming down the stairs";
my $limit = 3;
my $count;

$str =~ s/(*COMMIT)(?(?{ $count++ >= 3 })(*FAIL))a/A/g;
say $str;
Run Code Online (Sandbox Code Playgroud)

留下文字"穿着睡衣的BAnAnAs正在下楼" $str- 只有前三个"a"受到影响,并且在第三个之后它停止扫描字符串以获得更多匹配.