2

HTML ファイルを解析しようとしていますが、外側の div タグ内のすべてを一意の ID で抽出したいと考えています。サンプル:

<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 パーサーを使用してコンテンツを抽出することについて正しく言及していますdivMojo::DOMを使用したオプションの 1 つを次に示します。

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 に答える