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

发布于 2024-08-18 16:10:17 字数 183 浏览 3 评论 0原文

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

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

谢谢。

What is a Perl regex that can replace select text that is not part of an anchor tag? For example I would like to replace only the last "text" in the following code.

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

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浪漫之都 2024-08-25 16:10:17

您不想尝试使用正则表达式解析 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

You don't want to try to parse HTML with a regex. Try HTML::TreeBuilder instead.

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
千纸鹤带着心事 2024-08-25 16:10:17

我暂时占了上风:

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

但我对 开创性文本;因此,我们将在后续努力中追求 Treebuilder。

I have temporarily prevailed:

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

but I was dispirited, dismayed, and enervated by the seminal text; and so shall pursue Treebuilder in subsequent endeavors.

耶耶耶 2024-08-25 16:10:17

不要将正则表达式用于此类内容。使用一些适当的 HTML 解析器,并且只需对您感兴趣的 html 部分使用纯正则表达式即可。

Don't use regexps for this kind of stuff. Use some proper HTML parser, and simply use plain regexp for parts of html that you're interested in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文