Выцепить текст только из одного <div>

Тема в разделе "Регулярные выражения", создана пользователем sarkis, 16 окт 2014.

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

    sarkis

    Регистр.:
    27 фев 2014
    Сообщения:
    249
    Симпатии:
    36
    есть код html в переменной $main_str


    Код:
    <div style="display: table-cell; vertical-align: top">
    <div>Текст1</div>
    
    <div class='word'>Текст2</div>
    <div>Текст3</div>
    
    </div>
    
    Нужно регуляркой вывести "текст1" ..
    как я делаю :
    Код:
    preg_match_all("|<div>([\r\w\W\s]+.*)<\/div>|U",$main_str, $opis, PREG_PATTERN_ORDER);
    но ,учитывая , что в контенте страницы много текста в тегах <div></div> , то получаю не совсем то,что нужно ...
    Как грамотно составить регулярное выражение ,чтобы получить значение "Текст1" сразу ...
    делал вот еще так , но не помогло :
    Код:
    preg_match_all("|<div style=\"([\r\w\W\s]+.*)\"><div>([\r\w\W\s]+.*)<\/div>|U",
    $main_str,
    $opis, PREG_PATTERN_ORDER);
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    PHP:
    preg_match_all("|<div[^>]*>\s*<div>([^<]*)<\/div>|U",
    $main_str,
    $opisPREG_PATTERN_ORDER);
    Может зацепится за <div class='word'> тогда
    PHP:
    preg_match_all("|<div[^>]*>\s*<div>([^<]*)<\/div>\s*<div class='word'>|U",
    $main_str,
    $opisPREG_PATTERN_ORDER);
    [^>]* означает ноль или более любых символов кроме >
    аналогично с [^<]* только там любые кроме <
     
    Последнее редактирование: 16 окт 2014
    sarkis нравится это.
  3. sarkis

    sarkis

    Регистр.:
    27 фев 2014
    Сообщения:
    249
    Симпатии:
    36
    Спасибо вам ...Коротко подскажите значение [^<]* и [^>]*

    если не затруднит , подскажите для вот такого кода регулярку , а то я пока сообразить не могу
    Код:
    <a href="/board/sale/17071/">
              <img src="/upload/shop_2/1/7/0/item_17071/small_shop_items_catalog_image17071.jpg" alt="тест" title="тест" />
            </a>
    делаю вот так :
    Код:
    preg_match_all("|<a[\s*]href=\"(.*)><img src=\"[^>]*\/><\/a>|U",
    $main_str,
    $img, PREG_PATTERN_ORDER);
    но показывает абсолютно другую картинку ...
    Заранее спасибо
     
    Последнее редактирование модератором: 17 окт 2014
  4. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    На первый взгляд там перевод строки и пробелы перед <img а в регулярке слитно ><img добавить туда \s* это захватит любые пробельные символы и переносы строк.
    PHP:
    preg_match_all("|<a[\s*]href=\"(.*)>\s*<img src=\"[^>]*\/>\s*<\/a>|U",
    $main_str,
    $imgPREG_PATTERN_ORDER);
     
    sarkis нравится это.
  5. sarkis

    sarkis

    Регистр.:
    27 фев 2014
    Сообщения:
    249
    Симпатии:
    36
    Смотрите ,вот второй код ,который выводит
    Код:
    <a href="/index.php">
              <img src="/image/logo.png" alt="тест" title="тест" />
            </a>
    Мне нужно именно первый вариант ..Как я понимаю , тут нужно привязать регулярку к атрибутам ссылки как-то ..
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    Да, href /board/sale/ или src ...
    PHP:
    preg_match_all("|<a[\s*]href=\"(/board/sale/.*)>\s*<img src=\"[^>]*\/>\s*<\/a>|U",$main_str,$imgPREG_PATTERN_ORDER);
    PHP:
    preg_match_all("|<a[\s*]href=\"(.*)>\s*<img src=\"/upload/shop_2/[^>]*\/>\s*<\/a>|U",$main_str,$imgPREG_PATTERN_ORDER);
    Или цепляться за разметку выше или ниже искомого участка
     
Статус темы:
Закрыта.