Perl用捕获组长度替换捕获组

时间:2018-02-09 15:17:59

标签: regex perl

鉴于:

ng serve

什么单一的正则表达式' ????'是$ 1的长度可以产生输出" foo_4__4__3_bar" ?

那就是" 9528"替换为" _4 _"," 5734"用" _4 _",剩下的" 776"用" _3 _"。

1 个答案:

答案 0 :(得分:5)

您可以使用/e modifier将Perl代码添加到替换部分中,然后进行规避。

my $str = "foo95285734776bar";
$str =~ s/([0-9]{2,4})/'_' . length($1) . '_'/ge;

print $str;

将输出

foo_4__4__3_bar

请注意,您现在需要一个完整的Perl表达式。这就是为什么你必须实际引用和连接下划线的原因。

来自perlop

  

/e将导致替换部分被视为完整的Perl表达式并在那时进行评估。但是,它在编译时检查语法。第二个e修饰符将导致替换部分在作为Perl表达式运行之前被撤消。