Мне нужно заменить текст сразу после закрытых </table> тегов в Perl - PullRequest
0 голосов
/ 31 марта 2011

Вы часто помогали мне, ребята, так что я надеюсь, что вы можете сделать это снова:]

У меня есть строка, которая содержит HTML-данные (которые не обязательно имеют

<table> 

теги, но это может иметь то иногда), и я хочу заменить строку.На самом деле, я делаю это как «заменить первую находку

<br> 

на

<br><div>newdiv</div>

», но это не работает, когда таблица готова, потому что «newdiv» долженбыть вне таблицы.

Есть ли способ сказать Perl о замене только после того, как определенный тег (в моем случае это будет

</table>

) перед поиском?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Синтаксический анализ HTML с помощью регулярных выражений, как правило, плохая идея. Это особенно плохо в обобщенном случае обработки произвольного HTML. Однако, как правило, он становится все менее и менее плохим, чем больше вы можете ограничить вводимые данные.

Вы пытались использовать HTML :: TreeBuilder или HTML :: Parser для анализа вашего HTML? Этот непроверенный код должен делать то, что вы хотите - насколько я могу судить из вашего описания, пожалуйста, публикуйте образцы данных и желаемые результаты, где это возможно.

# Parse your html
my $t = HTML::TreeBuilder->new_from_content( $html );
$t->eof;
$t->elementify;

my @tables = $t->lookdown( _tag => 'table' );
for my $table ( @tables ) {

    # Skip this table unless it is immediately followed by a br  
    my $br = $table->right; 
    next unless $br->tag eq 'br';

    # Insert the new div
    $br->postinsert('<div>newdiv</div>');
}
0 голосов
/ 31 марта 2011

почему бы вам не пройти файл построчно, считая все начальные / конечные теги таблицы. и если сумма равна нулю (все начальные теги таблицы закрыты конечным тегом), вы делаете сопоставление / замену ..

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