Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Регулярные выражения > Выделить тег с произвольным числом вложенных тегов |
Автор: barbiturat 28.12.2009, 13:38 | ||
Как в приведенном примере найти <div class="someDiv"> со всем его содержимым при помощи одного регулярного выражения? Это вообще возможно?
|
Автор: sir_nuf_nuf 28.12.2009, 15:37 | ||
Ага, возможно:
P.S. Да, такая регулярка поддерживает только xml - стиль - т.е. когда теги либо парные либо самозакрывающиеся. Распарсить старый html типа <b><i></b></i> или <br> не получится. |
Автор: n4n0bit 28.12.2009, 17:34 |
barbiturat http://search.cpan.org/~gaas/HTML-Parser-3.64/Parser.pm |
Автор: barbiturat 29.12.2009, 02:30 |
sir_nuf_nuf, спасибо! Дома попробую. А что значит (?1)? Добавлено через 4 минуты и 20 секунд n4n0bit, мне это нужно для использования не на perl, а на JavaScript. К сожалению, конструкции RegExp на JavaScript-форумах обсуждаются крайне редко, вот и запостил вопрос сюда ![]() |
Автор: DurRandir 29.12.2009, 08:59 |
(?1) - это рекурсивный матчинг внутри регулярки (матчит часть этого же самого регулярного выражения рекурсивно, для произвольной вложенности внутренних тегов). Без этого расширения (классическими регулярками) эта задача нерешаема. |
Автор: sir_nuf_nuf 29.12.2009, 12:23 | ||
А сразу написать было не судьба ? (?1) - это означает, что на данном месте нужно опять начать применять кусок регулярки начинаемый в первой (1) группе (круглой скобочек). Рекурсивная регулярка - нововведение perl, в JavaScript такого нет. Зато в JS все решается вообще без регулярок:
Правда, здесь только содержимое этого дива.. ну да ладно. |
Автор: sir_nuf_nuf 29.12.2009, 15:26 |
Ага.. с удивлением обнаружил, что только в 5.10. В 5.8.8 - нет. |