如何在Perl中替换不属于锚标记的文本?

时间:2010-01-25 10:05:20

标签: regex perl text anchor

什么是Perl正则表达式可以替换不属于锚标记的选择文本?例如,我想只替换以下代码中的最后一个“文本”。

blah <a href="http://www.text.com"> blah text blah </a> blah text blah.

感谢。

3 个答案:

答案 0 :(得分:8)

您不想尝试使用正则表达式解析HTML。请改为HTML::TreeBuilder

use HTML::TreeBuilder;

my $html = HTML::TreeBuilder->new_from_file('file.html');
# or some other method, depending on where your HTML is

doReplace($html);

sub doReplace
{
  my $elt = shift;

  foreach my $node ($elt->content_refs_list) {
    if (ref $$node) {
      doReplace($$node) unless $$node->tag eq 'a';
    } else {
      $$node =~ s/text/replacement/g;
    } # end else this is a text node
  } # end foreach $node

} # end doReplace

答案 1 :(得分:1)

我暂时占了上风:

$html =~ s|(text)([^<>]*?<)(?!\/a>)|replacement$2|is;

seminal text让我感到沮丧,沮丧和沮丧;因此,在随后的努力中追求Treebuilder。

答案 2 :(得分:0)

不要将regexps用于此类内容。使用一些正确的HTML解析器,只需使用普通的regexp来处理你感兴趣的部分html。