Совпадение со всем, что не в теге <div> - PullRequest
0 голосов
/ 25 июня 2011

Мне нужно регулярное выражение, которое будет соответствовать всему , кроме тега <div>. Например:

foobar<p>lol</p><div>something</div>blahblah

Должно совпадать foobar<p>lol</p> и blahblah

Ответы [ 3 ]

3 голосов
/ 25 июня 2011

Как уже указывали 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
0 голосов
/ 25 июня 2011

Не уверен, что вы пытаетесь достичь, и большой предостережение о том, что это не сработает на всем 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 для получения дополнительной информации.

0 голосов
/ 25 июня 2011

Выбрать *:not(div).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...