【问题标题】:Count html tags with Perl regex使用 Perl 正则表达式计算 html 标签
【发布时间】:2014-01-03 09:23:03
【问题描述】:

我正在尝试解析 HTML 文件以计算 HTML 标记。不过我对正则表达式不太熟悉。

我当前的代码仅按行计算。不是逐个标记。它返回整行。

while(<SUB>){
    while(/(<[^\/][a-z].*>)/gi){
        print $_;
        $count++;
    }
}

假设我们在文件中有这样一行

<div>blahblahblah</div><h1>hello</h1><p>blah</>

我需要提取每个 HTML 标签的开始标签以及 &lt;hr&gt;&lt;br&gt;&lt;img&gt; 等标签。

你能不能把我引向正确的方向。

【问题讨论】:

  • 考虑使用搜索引擎寻找 RegEx 的替代品。 IE。必应搜索bing.com/search?q=parse+html+perl+module 可能会给你一些链接。
  • 对上述问题的选定答案说,“正则表达式查询不具备将 HTML 分解成有意义的部分的能力。”这完全正确吗?
  • 通读高评价的答案——那里有很多有趣的东西。第三个(关于语法)为您提供了解释限制背后理论的链接。请注意,不同的语言/库通常会实现一些扩展,这些扩展可能允许对嵌套结构进行一些解析。
  • @shan:是的,完全正确。尝试使用正则表达式处理 HTML 是一个糟糕的选择。
  • 虽然您确实不应该使用正则表达式来 解析 html,但我认为当您只想计算标签时,它们不是太糟糕的选择...

标签: html regex perl extract


【解决方案1】:

如果您想计算文档中的 HTML 标记,我建议您使用 HTML::Treebuilder。

use strict;
use HTML::Tree;
use LWP::Simple;

my $ex = "http://www.google.com";

my $content = get($ex);

my $tree = HTML::Tree->new();

$tree->parse($content);

my @a_tags = $tree->look_down( '_tag' , 'div' );


my $size=@a_tags;
print $size;

现在您可以指定不同的标签名称而不是 div 并计算您需要的所有不同标签。我建议学习 HTML::Treebuilder,因为它是一个非常有用的模块,您可能会发现您可能觉得有用的方法。

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2019-11-25
    • 2019-05-18
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多