Помогите выпарсить регуляркой

Тема в разделе "PHP", создана пользователем phillip, 5 авг 2009.

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

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Изучаю рэгулярки. Парсю фрилансерский сайт)) Моя строка

    Код:
    <td class="il_main"><a href="/projects/131516.html" class="item">Модерация ссылок в каталоге.</a><div class="il_item_descr">Контент-менеджмент, Прочее | сегодня в 15:44</div></td>
    <td class="il_small"><b class="amount_2">до 50 USD</b></td>
    Мне надо соответственно загнать в первую подмаску (или как это называется :)) Урл, во вторую- заголовок, и в третью- цену. Пока что пишу так

    #class=\"il_main\">(.*\</a\>).?\</b#s
    Получается шляпа какая-то. Помогите, пожалуйста. Желательно с пояснениями, хочу научится это делать. Буду щелкать спасибо :)
     
  2. Phoenix168

    Phoenix168

    Регистр.:
    15 ноя 2007
    Сообщения:
    182
    Симпатии:
    44
    Небольшое уточнение, вам нужно три маски для поиска "/projects/131516.html", "Модерация ссылок в каталоге." и "до 50 USD" отдельно?
     
  3. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    да, именно :)
    Код:
    Контент-менеджмент, Прочее | сегодня в 15:44
    это не надо. Хотя!! время тоже можно выпарсить)
     
  4. qwyjibo

    qwyjibo Постоялец

    Регистр.:
    27 янв 2009
    Сообщения:
    64
    Симпатии:
    12
    PHP:
    <?php
    $str 
    '<td class="il_main"><a href="/projects/131516.html" class="item">Модерация ссылок в каталоге.</a><div class="il_item_descr">Контент-менеджмент, Прочее | сегодня в 15:44</div></td>
    <td class="il_small"><b class="amount_2">до 50 USD</b></td>'
    ;

    preg_match_all('/href=\"(.+)\" class=\"item\">(.+)<\/a><div class=\"il_item_descr\">.+<\/div><\/td>\s+<td class=\"il_small\"><b class=\"amount_2\">(.+)<\/b><\/td>/siU'$str$match);

    echo 
    "<pre>";
    print_r($match);
    echo 
    "</pre>";
    ?>
    Я уверен, что можно сделать лучше и т.д. Но так работает. То что нужно выпарсить просто заключи в скобки (), и оно будет в отдельном элементе массива выдаваться.
     
    phillip нравится это.
  5. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    для Phoenix168:
    а про отдельно или нет не совсем понял) То есть вы спрашиваете, сделать ли три регулярки, или сделать одной? или что? Мне желательно бы чтобы одной, и результат помещался в массив, где элементы массива- результаты поиска. Но если это сильно сложно-можно и разными регулярками. Только с пояснениями, чтоб я вникал)))

    для qwyjibo:
    спасибо! счас хатестю. как бы мне только вникнуть коим образом это самому составлять

    Добавлено через 7 минут
    Не вкатило :nezn: Куча лишнего, искомого мало. Может быть потому что я привел только отрывок. Если оригинал- то это исходный код главной страницы http://weblancer.net . Не парсится верным образом
     
  6. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Для составления регулярок мне очень помогает сервис http://www.regexpal.com/
     
  7. qwyjibo

    qwyjibo Постоялец

    Регистр.:
    27 янв 2009
    Сообщения:
    64
    Симпатии:
    12
    Вот так вроде неплохо получается:
    PHP:
    <?php

    $ch 
    curl_init();
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1)");
    curl_setopt($chCURLOPT_URL'http://www.weblancer.net/');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    $result=curl_exec ($ch);
    curl_close ($ch);

    header("Content-Type: text/plain");

    preg_match_all('/<td class=\"il_main\"><a href=\"(.+)\" class=\"item\">(.+)<\/a><div class=\"il_item_descr\">(.+)<\/div><\/td>\s+<td class=\"il_small\"><b class=\"(amount_2|unknown)\">(.+)<\/b><\/td>/'$result$match);
    print_r($match);

    ?>
     
    phillip нравится это.
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    почитай про PREG_SET_ORDER и PREG_PATTERN_ORDER
     
  9. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    2 phillip, в атаче шпаргалка небольшая по регуляркам, может пригодится
     

    Вложения:

    • regular.png
      regular.png
      Размер файла:
      104 КБ
      Просмотров:
      9
  10. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Спасибо всем. А вот еще пробую распарсить

    Код:
    <TD><A id=f-1_onmousedown_45 class=filename title="" href="http://depositfiles.com/files/rbv5cvrs4" DN528="0" EN528="45" zpnclick="true">ps-da3a.part8.rar</A> </TD>
    <TD>
    Суть в том, что у меня в конце регулярки идет </A> </TD>. А далее по тексту этих </A> </TD> еще много. Как сделать так, чтобы регулярка не шла хз куда, а останавилась на первом найденном значении?
     
Статус темы:
Закрыта.