我正在尝试解析一个html文件,我想用一个唯一的id提取外部div标签内的所有内容。样品:
<body>
...
<div id="1">
<div id="2">
...
</div>
<div id="3">
...
</div>
</div>
...
</body>
在这里,我想要提取<div id="1">
及其对应的</tag>
之间的所有内容,而不是第一个</div>
标记。
我浏览了很多较旧的帖子,但它们无法正常工作,因为当他们看到第一个</div>
标签时,它们就停止了,这不是我想要的。
任何指针都会受到赞赏。
答案 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