0

<div id="class1">の終わりまで正規表現で見つける必要があります</div><div>私はまた、そのテキストの中に同じくらい多くを持っているかもしれません。以下のコードを見つけてください

This is example <div id="class1">This is <div id="subclass1">This is </div> <div id="subclass2">This is </div> This is </div> This is example

以下のコードを試してみました。しかし、それは最初</div>のものにすぎ<div id="subclass1"> ません。これを解決するのに役立つものはありますか?

キャプチャしようとしたコードは次のとおりです。

<div id="class1">(?:(?!<\/div>).)*?</div>
4

4 に答える 4

4

適切なHTMLパーサーを使用してください。

use strict;
use warnings;
use feature qw( say );

use XML::LibXML qw( );

my $html = 'This is example <div id="class1">This is <div id="subclass1">This is </div> <div id="subclass2">This is </div> This is </div> This is example';

my $parser = XML::LibXML->new();
my $doc    = $parser->parse_html_string($html);
my $root   = $doc->documentElement();

for my $div ($root->findnodes('//div[@id="class1"]')) {
   say "[", $div->toString(), "]";
}
于 2012-12-08T04:54:20.050 に答える
0

多くの人は、正規表現ではなくHTMLを解析するために、常に「適切なHTMLパーサーを使用する」と言います。一部の人々が気付いていないのは、満たす必要のある要件があり、それらの要件には正規表現が必要な場合があるということです。

<div id=".+?">.*</div>あなたのために働くはずです。

http://regexr.com?33336

于 2012-12-09T12:21:57.130 に答える
0
$ echo 'This is example <div id="class1">This is <div id="subclass1">This is </div> <div id="subclass2">This is </div> This is </div> This is example' | sed -n 's/<div id="class1">\(.*\)<\/div>/\1/p'
This is example This is <div id="subclass1">This is </div> <div id="subclass2">This is </div> This is  This is example
于 2012-12-08T02:54:17.210 に答える
0

適切な HTML/XML パーサーを使用する必要があります。何らかの理由で正規表現を使用したい場合は、ネストされた正規表現が役立ちます。(詳細perldoc perlreは要チェック)

$re = qr{
  (
    <div[^>]*>
    (?:(??{$re}) | [^<>]*)*
    </div>
  )
}x;

print "$1\n" if(/$re/o);
于 2012-12-08T03:34:06.000 に答える