0

HTMLドキュメントの文字列からクラスを取得しようとしています。例:文字列:

<span class="bullet first">Some</span>Published <abbr class="published">Sometexthere</abbr></p>

したがって、私が達成しようとしているのは、文字列内のすべての「クラス」を取得することです(箇条書き、最初に公開)。ただし、問題は、文字列内に任意の量のclass=""が含まれる可能性があることです。だから、私は1つの正規表現でそれを行う方法はないと思います、私はここでサイクルが必要ですか?

4

3 に答える 3

2

どのように行うにしても、それは 2 段階のプロセスです。

  1. クラス属性の値を抽出します ("bullet first"、"published")。
  2. これらの値 ("bullet"、"first"、"published") からクラスを抽出します。

XML::LibXML (これは HTML パーサーでもあります):

my @classes =
   map split(' ', $_->getValue()),          # Step 2
      $xpc->findnodes('*/@class', $node);   # Step 1

(または.//*/@class、あなたが望むものに応じて。)

于 2013-01-05T17:36:12.987 に答える
0

これを追加して、「だから、1つの正規表現でそれを行う方法はないと思います。ここでサイクルが必要ですか?」という部分に答えます。

正規表現で修飾子 g を使用する必要があります

my $text = '<span class="bullet first">Some</span>Published <abbr class="published">Sometexthere</abbr></p>';
while($text =~ /class\s*=\s*"([^"]+)"/g) {
  print "class --> $1\n";
}

これが結果です

class --> bullet first
class --> published
于 2013-01-05T17:43:44.387 に答える
0

html に次のような複雑なデータが含まれていないことが確実な場合は<p> class="abc" <\p>、global 修飾子を使用して正規表現をループすると、最後に一致した場所から開始されます。例

While ($_=~ /class="(.*?)"/g) {
    #process class names here
    #class is in $1
}

<p> class="abc" <\p>ただし、一般的に使用する場合は、クラス abc を含むものとして文字列を処理するため、html パーサーをお勧めします。

于 2013-01-05T17:40:42.503 に答える