匹配xml标记并替换其值

时间:2013-11-04 22:19:01

标签: xml regex perl

我正在尝试将标头标记<h*>替换为  <center><h*>.....</h*></center>我面临的问题是,当我有一个标题标记从一行开始并以某个其他行结束时,<center>标记不会被包裹。

<h3> Spotting the
    Pileated
    HummingBird in
    the wild </h3>

我想用<center><h*> .. </h*></center>标记替换标题标记。

这就是我正在尝试它的工作,它是一个标题标记开始和结束在同一行但不是多行。

while (<>){
           $_ =~ s/^\<h(.)>\s*(.*)\s*<\/h(.)>/<center><h$1>$2<\/h$3><\/center>/g;
       print $_;
}

1 个答案:

答案 0 :(得分:0)

我必须说使用XML Parser可以进一步缓解您的生活。但是如果考虑应用多重正则表达式,那么找一个正则表达式应该不会那么难。我用下面的代码进行了测试,结果很有效。

my $str = '<h3> Spotting the
    Pileated
    HummingBird in
    the wild </h3>';

$str =~ s/(<h\d>[\n\s\w]*<\/h\d>)/<center>$1<\/center>/mg;
                                                       ^
                                                       |------ for multiline regex   
print $str;

正如您所看到的,使用/m将允许您编写一个匹配多行的表达式。希望这会有所帮助。

[\n\s\w]*此处仅基于您提供的示例文字。您可能需要对其进行修改以满足您的原始要求。