Perl正则表达式在元素中查找元素

时间:2012-12-08 02:44:22

标签: regex perl

我需要通过<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">的{​​{1}}的第一个<div id="class1">(?:(?!<\/div>).)*?</div> 能帮我解决这个问题吗?

我试图捕获的代码是:

{{1}}

4 个答案:

答案 0 :(得分: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(), "]";
}

答案 1 :(得分: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

答案 2 :(得分:0)

您应该使用适当的HTML / XML解析器。如果你想以任何理由使用正则表达式,嵌套的正则表达式可以帮助你。 (查看perldoc perlre了解详细信息。)

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

print "$1\n" if(/$re/o);

答案 3 :(得分:0)

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

<div id=".+?">.*</div>应该适合你。

http://regexr.com?33336