如何在全局替换中增加变量?

时间:2017-06-01 06:05:31

标签: regex perl increment

$html =~ s[<p>(.+?)</p>][<li value="++$count">$1</li>]gis;

如何在perl中实现上述代码?

我需要++$count是一个为每次发生的替换增加的数字。

2 个答案:

答案 0 :(得分:6)

使用perlsecret中的baby cart @{[ ]}

$html =~ s[<p>(.+?)</p>][<li value="@{[++$count]}">$1</li>]gis;

来自perldoc

  
    

它的工作方式是当在双引号字符串中看到@ {...}时,它被评估为一个块。该块创建对包含eval结果的匿名数组的引用。

  

答案 1 :(得分:2)

您可以使用/e修饰符将s///的替换部分转换为每次替换评估一次的Perl表达式。

$html =~ s[<p>(.+?)</p>]['<li value="'.++$count.qq{">$1</li>}]gise;

因为它是一个完整的表达式,所以你需要将其余的字符串放入引号中。我使用单引号和双引号分别没有插值和插值。

my $html = "<p>foo</p><p>bar</p>";
my $count = 0;
$html =~ s[<p>(.+?)</p>]['<li value="'.++$count.qq{">$1</li>}]gise;

print $html;

__END__
<li value="1">foo</li><li value="2">bar</li>