微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

匹配标签<div>中没有的所有内容

如何解决匹配标签<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 举报,一经查实,本站将立刻删除。