Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить всё внутри тэгов DIV, вложенные теги DIV 
V
    Опции темы
Akella
  Дата 3.4.2012, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



Вот страничка
moyareklama.ru/%D0%9A%D0%B0%D0%BB%D1%83%D0%B3%D0%B0/%D0%BE%D0%B4%D0%BD%D0%BE%D0%BA%D0%BE%D0%BC%D0%BD%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B8%D1%80%D1%8B_%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D0%B0/%D0%B2%D1%81%D0%B5

Нужно получить все объявления
http://i28.fastpic.ru/big/2012/0403/84/233...3c8cd526484.png

но там куча вложенных тэгов DIV

Как мне получить всё внутри

Первую строку я получаю этим выражением
Код
(?is)<div class="ad_preview div_\d+ ?\w* "  openad="\d+" >.*?</div>


а как получить всё до тега див, который относится к этой строке?
PM MAIL   Вверх
Akella
Дата 3.4.2012, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



Подумал, что можно брать от тэга до тэга, но получается находить только 7 из 15

Код
(?is)<div class="ad_preview.*?<div class="ad_preview


Добавлено через 5 минут и 55 секунд
Пока обошёлся так: 
Код
(?is)<div class="ad_preview(.*?)<div class="sa_favorite" goad="1">

PM MAIL   Вверх
Pfailed
Дата 3.4.2012, 19:28 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 6
Всего: 39



Регулярные выражения плохо подходят для разбора html, особенно когда речь идет о выделении сбалансированных тегов.
Сравните насколько легко это делается без регулярных выражений
Код

use Web::Query;

wq(shift)->find('.sa_content')->each(sub {
    my $title  = $_->find('.sa_title')->text;
    my $text   = $_->find('.sa_txt')->text;
    my $phones = $_->find('.sa_phone')->map(sub {
        $_->text;
    });
    
    print 'Title: ', $title, "\n",
          'Text: ', $text, "\n",
          'Phones: ', join('; ', @$phones), "\n",
          "---------------------------------\n";
});





--------------------
PM MAIL   Вверх
EcSYZ
Дата 3.4.2012, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 21.6.2007

Репутация: нет
Всего: 1



Так же можно заюзать Mojo::DOM (Mojolicious).
Код будет не сильно отличатся от примера выше.
PM MAIL WWW   Вверх
Akella
Дата 4.4.2012, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



Проблема в том, что я пишу программу не на Perl. Просто у меня библиотека регулярных выражений DiRegExpr совместима с Perl, поэтому я здесь задал вопрос.

Добавлено @ 08:57
Цитата(Pfailed @  3.4.2012,  19:28 Найти цитируемый пост)
Регулярные выражения плохо подходят для разбора html


Да, Вы правы smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.1185 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.