2

我正在尝试解析一个 html 文件,并且我想提取具有唯一 ID 的外部 div 标记内的所有内容。样本:

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

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

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

  </div>
  ...
</body>

在这里,我想提取介于两者之间的所有内容<div id="1">及其对应</tag>的 NOT 第一个</div>标签。

我浏览了许多较旧的帖子,但它们不起作用,因为当他们看到</div>不是我想要的第一个标签时,它们就停止了。

任何指针将不胜感激。

4

2 回答 2

7

听起来您的问题是您正在尝试使用正则表达式解析 HTML

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

于 2013-01-16T13:58:40.563 回答
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
于 2013-01-16T17:09:05.563 回答