在Perl中查找/替换添加增量数字

时间:2014-06-03 15:54:59

标签: regex perl replace increment

我有一个很长的xml文件,其中包含许多次字符串

<div type="something">

我只需要在文字“id =”NUMBER“中添加这些字符串 其中NUMBER是一个从1开始并递增1的值。 我的输出应该是

<div id="1" type="something">
<div id="2" type="something">
<div id="3" type="something">
...

我最好使用Perl;有谁可以帮助我?

谢谢你, 斯特凡

我试过了:

use strict;
use warnings;

my $str = "<div id=\"";

my $i = 0;
$str =~ s/<div id=\"/'<div id="'.++$i/ eg;
print "$str";

1 个答案:

答案 0 :(得分:5)

带有XML文件的正则表达式类似于使用瑞士军刀的心脏直视手术。 Just because you can doesn't mean you should

由于有大量专用的XML解析器可供选择,为什么不使用它呢?以下是使用XML::LibXML

的方法
use strict;
use warnings;
use XML::LibXML;

my $xml = XML::LibXML->new->parse_file( 'file.xml' );

my @wanted_nodes = $xml->findnodes( '//div[@type="something"]' );

my $counter = 1;
for my $div ( @wanted_nodes ) {

    $div->setAttribute( 'id', $counter++ );
}

$xml->toFile( 'new_file.xml' );