我需要正则表达式匹配所有而不是<div>
标记。例如:
foobar<p>lol</p><div>something</div>blahblah
应匹配foobar<p>lol</p>
和blahblah
答案 0 :(得分:3)
正如Mat和maenu已经指出的那样,使用正则表达式解析HTML就是说 - 最不容易出错。由于您使用perl标记标记了您的问题,我将使用HTML::TokeParser::Simple
给您一个小例子,我认为这是对这些操作的一个很好的选择。
use strict;
use warnings;
use HTML::TokeParser::Simple;
my $parser = HTML::TokeParser::Simple->new( *DATA );
my $is_in_div;
while ( my $token = $parser->get_token ) {
if ( $token->is_start_tag( 'div' ) ) {
$is_in_div++;
next;
}
if ( $token->is_end_tag( 'div' ) ) {
$is_in_div--;
next;
}
print $token->as_is if not $is_in_div;
}
__DATA__
foobar<p>lol</p><div>something</div>blahblah
foobar<p>lol</p><div>more stuff<div>something</div></div>blahblah
答案 1 :(得分:0)
不确定您要完成什么,并且大警告这不适用于所有HTML(请参阅here),但以下内容可能会解决问题:
#!/opt/perl/bin/perl
use strict;
use warnings;
use 5.010;
my $html = 'foobar<p>lol</p><div>something</div>blahblah';
my @fragments = split(m{<div\b[^>]*>.*?</div>}is, $html);
say foreach @fragments;
有关详细信息,请参阅perldoc -f split
和perldoc perlre
。
答案 2 :(得分:-1)
Select *:not(div)
。