Что такое регулярное выражение Perl, которое может заменить выделенный текст, который не является частью тега привязки? Например, я хотел бы заменить только последний «текст» в следующем коде.
blah <a href="http://www.text.com"> blah text blah </a> blah text blah.
Спасибо.
Вы не хотите пытаться анализировать 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
У меня временно преобладает:
$html =~ s|(text)([^<>]*?<)(?!\/a>)|replacement$2|is;
но я был удручен, встревожен и взволнован семенным текстом ; и так будет преследовать Treebuilder в последующих усилиях.
Не используйте регулярные выражения для такого рода вещей. Используйте некоторый правильный анализатор HTML и просто используйте регулярное выражение для частей HTML, которые вас интересуют.