Не вытягивает preg_match_all

Тема в разделе "PHP Pro", создана пользователем new_forward, 22 июл 2011.

Статус темы:
Закрыта.
  1. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток!

    Вытягиваю из XML ,блоки <offer>

    XML:
    Код:
    $offers = <offer id="51" available="true">
    <url>http://spartakman.ru/2/15/122/48/51/</url>
    <price>150</price>
    <currencyId>RUB</currencyId>
    <categoryId>48</categoryId>
    <picture>http://site.ru/img/product/large/51_29.jpg</picture>
    <store>flase</store>
    <pickup>true</pickup>
    <delivery>true</delivery>
    <name>Пепельница с логотипом</name>
    <vendor>ФК "Спартак" Москва</vendor>
    <description/>
    </offer>
    −
    <offer id="53" available="true">
    <url>http://spartakman.ru/2/15/37/296/53/</url>
    <price>450</price>
    <currencyId>RUB</currencyId>
    <categoryId>296</categoryId>
    <picture>http://site.ru/img/product/large/53_39.jpg</picture>
    <store>flase</store>
    <pickup>true</pickup>
    <delivery>true</delivery>
    <name>Визитница на 96 визиток</name>
    <vendor>ФК "Спартак" Москва</vendor>
    <description/>
    </offer> 
    Вытягиваю так но ничего...

    Код:
    preg_match_all('#<offer id=".+?" available=".+?">(.+?)</offer>#i', $offers, $matches_offer);
    $b_offer = $matches_offer[1];
    print_r($b_offer);
    
    Где ошибка помогите...
     
  2. cat13

    cat13 Постоялец

    Регистр.:
    22 мар 2009
    Сообщения:
    84
    Симпатии:
    27
    PHP:
    '#<offer id=".+?" available=".+?">(.+?)</offer>#is' 
     
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
  4. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    не пойму, что за тупая мода пошла забивать гвозди микроскопом. Зачем использовать регулярки для парсинга XML если для этого есть специальные инструменты вроде SimpleXML?
     
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Порой легче взять микроскоп и забить 1 гвоздь, чем взять огромный станок для забивания гвоздей для 1 гвоздя) эти специальные инструменты - довольно много потребляют памяти и совсем небыстрые, это относительно конечно, для малых объёмах разницы нет, но при больших - разница есть.
     
  6. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    какой еще "станок для забивания гвоздей"? :)
    время "вытаскивания" блока offer:
    0.00145997886657715 - regexp
    0.00027608871459961 - simpleXML
    потребление памяти:
    326024 - регулярка
    319104 - simpleXML
    да и код намного проще:
    PHP:
    print_r(simplexml_load_string($offers));
    + в итоге мы получаем данные в виде структурированного объекта, и легко можем осуществить доступ к любому полю.
    Все еще видите хоть 1 плюс у регулярок в данной ситуации? :)
     
  7. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Согласен в этом вопросе с KillDead. Здесь вообще как бы кому какой инструмент по вкусу при забивание подобных гвоздей, я бы тоже воспользовался регуляркой, имхо preg_match_all() как то ближе к душе при подобных задачах, но это имхо...
     
Статус темы:
Закрыта.