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
$ 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 回答
0

很多人总是说“使用正确的 HTML 解析器”来解析 HTML 而不是正则表达式。有些人没有意识到需要满足一些要求,而这些要求可能需要正则表达式。

<div id=".+?">.*</div>应该为你工作。

http://regexr.com?33336

于 2012-12-09T12:21:57.130 回答