如果丢失则添加文本(Perl REGEXP)

时间:2012-01-22 16:57:23

标签: regex perl sed

使用Perl替换语句(s //)我想通过在某些项目中添加属性来修改某些XML(如果缺少)。这是一个例子:

...
<car color="red" owner="john">...</car>
<car color="green" age="3">...</car>
...

假设我想在无车的车上添加默认车主。我尝试了以下但没有成功:

s/(<car[^>]*)(?!owner="[^"]*")(.*>)|$1 owner="steve"$2/iUg

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:5)

虽然您可以使用正则表达式,但始终建议使用XML解析器。

Perl / CPAN产品包括:

答案 1 :(得分:1)

我通常使用XML::XSH2进行XML操作。您的问题可以轻松解决:

for //car[not(@owner)] set @owner "steve" ;

答案 2 :(得分:0)

你可以尝试这个

#!/usr/bin/perl -w

$str = <<EOF;
<car color="red" owner="john">.*#?§<car color="pink"> </car>.*#?§</car>
<car color="green" age="3">.*#?§</car>
<car owner="bill"></car>
EOF

$str =~ s/(<car(?![^>]+?owner))([^>]*?)>/$1$2 owner="steve">/g;

print $str;

最好的问候


PS:很可能这是一个错字,但无论如何,正则表达式中的竖线必须用斜线替换