如何提取div标签

时间:2013-01-16 13:55:05

标签: perl parsing

我正在尝试解析一个html文件,我想用一个唯一的id提取外部div标签内的所有内容。样品:

<body>
  ...
  <div id="1">

    <div id="2">
    ...
    </div>

    <div id="3">
    ...
    </div>

  </div>
  ...
</body>

在这里,我想要提取<div id="1">及其对应的</tag>之间的所有内容,而不是第一个</div>标记。

我浏览了很多较旧的帖子,但它们无法正常工作,因为当他们看到第一个</div>标签时,它们就停止了,这不是我想要的。

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:7)

听起来你的问题是你正试图parse HTML using regular expressions

别。使用HTML解析器。 CPAN有很多。我喜欢HTML::TreeBuilder::XPath

答案 1 :(得分:2)

Quentin正确地提到使用HTML解析器来提取div内容。以下是使用Mojo::DOM的一个选项:

use strict;
use warnings;
use Mojo::DOM;

my $text = <<END;
<body>
  ...
  <div id="1">
Under div id 1
    <div id="2">
Under div id 2
    </div>

    <div id="3">
Under div id 3
    </div>

  </div>
Outside the divs
</body>
END

my $dom = Mojo::DOM->new($text);

print $dom->find('div[id=1]')->pluck('text');

输出:

Under div id 1