什么是Perl正则表达式可以替换不属于锚标记的选择文本?例如,我想只替换以下代码中的最后一个“文本”。
blah <a href="http://www.text.com"> blah text blah </a> blah text blah.
感谢。
答案 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。