匹配xml标记并替换其值

匹配xml标记并替换其值,xml,regex,perl,Xml,Regex,Perl,我正在尝试用替换标题标记 ..我面临的问题是,当我有一个标题标签时,标签没有被缠绕,该标签从一行开始,在另一行结束,例如 <h3> Spotting the Pileated HummingBird in the wild </h3> 发现 皮莱 蜂鸟 荒野 我想用替换标题标记标签 这是我正在尝试的,它工作良好,它的标题标签开始和结束在同一行,但不是多行 while (<>){ $_ =~ s/^\<h(

我正在尝试用替换标题标记
..
我面临的问题是,当我有一个标题标签时,
标签没有被缠绕,该标签从一行开始,在另一行结束,例如

<h3> Spotting the
    Pileated
    HummingBird in
    the wild </h3>
发现
皮莱
蜂鸟
荒野
我想用
替换标题标记标签

这是我正在尝试的,它工作良好,它的标题标签开始和结束在同一行,但不是多行

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

我必须说,使用XML解析器将使您的生活更加轻松。但是如果你考虑应用Multin ReEX,找到正则表达式就不那么难了。我用下面的代码进行了测试,它成功了

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;
my$str='发现
皮莱
蜂鸟
“野性”;
$str=~s/([\n\s\w]*)/$1/mg;
^
|------对于多行正则表达式
打印$str;
如您所见,使用
/m
可以编写一个表达式,该表达式可以在多行上匹配。希望这会有所帮助


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

不要使用正则表达式进行修改,请为此使用XML解析器,这对将来更好。有一个特殊的条件,即只有在行首给出的标题标签才应该考虑替换,而不是在它们之间有一些前导空格的标签。这就是为什么我认为我应该使用正则表达式。我的一个是工作,但不是为那些标签开始和结束在不同的行。