Захват блока данных в html регулярным выражением

php perl регулярные выражения regexp

Есть html данные примерно такого вида:

<div>
<div id="content">
<div>title</div>
<div>text text text
<div>Сколько угодно открытых и закрытых div</div>
</div>
</div>
</div>

Помогите составить регулярное выражение для захвата блока <div id="content"> при том условии что количество открытых и закрытых дивом внутри блока не известно.

раньше использовалось примерно такое но оно не подходит для случаев со вложенными элементами:
<div[^>]content[^>]+>.*?(<div[^>]*>.*?</div>.*?)*</div>
Ответы:
Тут надо использовать рекурсию в регулярных выражениях.
Вот как-то так:
<?php
Гораздо проще сделать это не одним сложным регулярным выражением, а простым программным кодом из нескольких шагов, ибо структура тегов нерегулярная)
Регэкспы в этом деле — убого, слишком обобщенно и ненадёжно. Я когда-то тоже думал, что это единственная панацея в граббинге данных из страниц. Довольно недавно мне в голову пришла идея, что даже "плохой" HTML прекрасно парсится браузерами. Вопрос состоял только в "как?". Нашёл несколько решений:
1) для Python — http://www.crummy.com/software/BeautifulSoup/ BeautifulSoup;
2) для Ruby — http://github.com/whymirror/hpricot Hpricot;
3) для C++/Java/XSLT — http://home.ccil.org/~cowan/XML/tagsoup/ TagSoup;
4) для PHP — не интересовался, но, по всей видимости, есть.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.