1

HTMLファイルを解析する必要があり、次のようなものがあります:

<TAG1>
    <TAG1>
        TEXT_TO_FIND
        KEY
        <TAG1>
        </TAG1>
        <TAG1>
        </TAG1>
    </TAG1>
</TAG1>

アニメーションには複数のレベルがあることを考慮してください。テキスト TEXT_TO_FIND を取得するにはどうすればよいですか?

平易な英語で、私がする必要があるのは、「テキスト KEY を持つ最後のテキスト」と「テキスト KEY」の間のテキストを取得することです。これはドキュメントに一度だけ表示されます。

注1:この質問を見つけましたが、うまくいかなかったようです。私は空の結果を得続けました。これは次の式になります。

/<TAG1>(?!.*<TAG1>)(.*)KEY/ism

注 2: 前のメモの式から KEY を削除すると、ファイルの最後から最後までのテキストが取得されます。

よろしくお願いします!

4

3 に答える 3

1

こんにちは!HTMLファイルを解析する必要があり、次のようなものがあります:

次に、HTML パーサーが必要です。正規表現は、適切に実行できるほど強力ではありません。

HTML を解析して各 のコンテンツを取得したらTAG、次のようなものを使用できます。

/(.*)KEY/is

テキストに含まれているかどうかを確認し、含まれKEYている場合は、その前のものを取得します。

于 2010-02-07T20:35:17.113 に答える
0

各ツールを適切なコンテキストで使用してください。HTML パーサーでテキスト チャンクを見つけてから、正規表現でそれらと照合します。

#! /usr/bin/perl

use warnings;
use strict;

use HTML::Parser;

my $p = HTML::Parser->new(
  api_version => 3,
  text_h => [
    sub {
      local($_) = @_;
      print $1, "\n" if /(\S.+?)\s*\bKEY\b/s;
    },
    "dtext"
  ],
);

# for demo only
*ARGV = *DATA;

undef $/;
$p->parse(<>);

__DATA__
<TAG1>
    <TAG1>
        TEXT_TO_FIND
        KEY
        <TAG1>
        </TAG1>
        <TAG1>
        </TAG1>
    </TAG1>
</TAG1>

出力:

$ ./検索テキスト
TEXT_TO_FIND
于 2010-02-07T21:29:49.563 に答える
0

HTML パーサーを使いたくない場合、これは TEXT_TO_FIND に "<" または ">" が含まれていない場合に機能する正規表現です。

/\s*([^<>]*?)\s*?KEY/ism
于 2010-02-07T20:39:28.870 に答える