如何解决匹配标签<div>中没有的所有内容
| 我需要的正则表达式将匹配所有不在“ 0”标记中的内容。例如:foobar<p>lol</p><div>something</div>blahblah
应该匹配foobar<p>lol</p>
和blahblah
解决方法
正如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
, 不知道您要完成什么工作,并且要大胆地警告一下这不适用于所有HTML(请参见此处),但是以下方法可以解决问题:
#!/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
。
, 选择*:not(div)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。