Регулярка для контента

Тема в разделе "Регулярные выражения", создана пользователем Kalmikov1327828, 21 янв 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Kalmikov1327828

    Kalmikov1327828 Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    55
    Симпатии:
    3
    Возможно ли написать регулярку, которая бы находила блоки div, в которых содержится контент, т.е. именно текст, а не ссылки с анкорами, картинки и т.д? При чем эти блоки div должны быть самого низкого уровня вложенности по отношению к другим div блокам, иначе может получиться так, что будет находиться вся начинка сайта.

    И если это невозможно для regexp, может есть другие способы?
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    обычно блоки div имеют еще такую отличительную особенность как id или class и тд и тп вот их и используй
     
  3. Kalmikov1327828

    Kalmikov1327828 Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    55
    Симпатии:
    3
    Нет, в моем случае это не подходит. Слишком много различных id и class. Нужно "опознавать" блоки именно по содержимому
     
  4. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    к примеру так, для двух вариантов

    PHP:
    // все div без указанных тегов
    preg_match_all('#<div[^>]*>(((?!</?(a|img|input)).)*?)</div>#s',$page,$res);

    // все div содержащие только текст
    preg_match_all('#<div[^>]*>[^<]+</div>#',$page,$res);
     
    Kalmikov1327828 нравится это.
  5. Kalmikov1327828

    Kalmikov1327828 Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    55
    Симпатии:
    3
    pitkina, годится, спасибо. Ты очень приблизил меня к решению задачи.

    А не подскажет никто, как нужно подправить 2 вышенаписанные регулярки, чтобы исключить нахождение по ним пустых блоков div, в которых находятся одни пробелы и переводы строк?
     
  6. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    для первой можно через preg_replace для удаления пустых div
    PHP:
    preg_match_all('#<div[^>]*>((?!</?(a|img|input)).)*?</div>#s',preg_replace('#<div[^>]*>\s*</div>#','',$page),$res);
    и для второй
    PHP:
    preg_match_all('#<div[^>]*>[^<]*[^<\s]+[^<]*</div>#U',$page,$res);
     
    Kalmikov1327828 нравится это.
Статус темы:
Закрыта.