За последние 24 часа нас посетили 15052 программиста и 1771 робот. Сейчас ищут 1465 программистов ...

Получить массив с картинками

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

  1. kowapos

    kowapos Активный пользователь

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    Добрый день.
    Есть такой кусок:
    Код (PHP):
    1. <p><xpageslider> <photos> 
    2. <img class="alignnone wp-image-869 size-full" src="http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/862/49268.jpg" alt="49268" width="800" height="500" /> 
    3. <img class="alignnone wp-image-881 size-full" src="http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/795/5951184-gol.jpg" alt="5951184-gol" width="650" height="460" />
    4. <img class="alignnone wp-image-817 size-full" style="line-height: 1.6471;" src="http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/812/ee0df52-kmax-4311-1.jpg" alt="Бла бла" width="650" height="460" />
    5. </photos></xpageslider></p>
    6.  
    В теге <photos> есть картинки. как мне получить массив со всеми <img>?

    простите, но в регулярках не селен. Помогите пожалуйста

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а зачем вообще люди пытаются использовать регуляки для обхода xml?
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.097
    Симпатии:
    1.241
    Адрес:
    там-сям
    откуда в регулярках селен?!
     
  4. kowapos

    kowapos Активный пользователь

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    если вы видите выдуманные мною теги, это не значит, что это xml
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    не знаю насчет сейчас, а вообще наверное потому что регулярку можно вставлять "потом" не изменяя код.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.097
    Симпатии:
    1.241
    Адрес:
    там-сям
    это самый настоящий xml )))
    Код (PHP):
    1. <?php
    2. $text = <<<EOT
    3. <p><xpageslider> <photos> 
    4. <img class="alignnone wp-image-869 size-full" src="http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/862/49268.jpg" alt="49268" width="800" height="500" /> 
    5. <img class="alignnone wp-image-881 size-full" src="http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/795/5951184-gol.jpg" alt="5951184-gol" width="650" height="460" />
    6. <img class="alignnone wp-image-817 size-full" style="line-height: 1.6471;" src="http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/812/ee0df52-kmax-4311-1.jpg" alt="Bla bla" width="650" height="460" />
    7. </photos></xpageslider></p>
    8. EOT;
    9. $xml = simplexml_load_string($text);
    10. foreach ($xml->xpageslider->photos->img as $img) {
    11.     var_dump($img);
    12. } 
    результат:
    Код (Text):
    1. class SimpleXMLElement#2 (1) {
    2.   public $@attributes =>
    3.   array(5) {
    4.     'class' =>
    5.     string(32) "alignnone wp-image-869 size-full"
    6.     'src' =>
    7.     string(77) "http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/862/49268.jpg"
    8.     'alt' =>
    9.     string(5) "49268"
    10.     'width' =>
    11.     string(3) "800"
    12.     'height' =>
    13.     string(3) "500"
    14.   }
    15. }
    16. class SimpleXMLElement#5 (1) {
    17.   public $@attributes =>
    18.   array(5) {
    19.     'class' =>
    20.     string(32) "alignnone wp-image-881 size-full"
    21.     'src' =>
    22.     string(83) "http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/795/5951184-gol.jpg"
    23.     'alt' =>
    24.     string(11) "5951184-gol"
    25.     'width' =>
    26.     string(3) "650"
    27.     'height' =>
    28.     string(3) "460"
    29.   }
    30. }
    31. class SimpleXMLElement#2 (1) {
    32.   public $@attributes =>
    33.   array(6) {
    34.     'class' =>
    35.     string(32) "alignnone wp-image-817 size-full"
    36.     'style' =>
    37.     string(20) "line-height: 1.6471;"
    38.     'src' =>
    39.     string(91) "http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/812/ee0df52-kmax-4311-1.jpg"
    40.     'alt' =>
    41.     string(7) "Bla bla"
    42.     'width' =>
    43.     string(3) "650"
    44.     'height' =>
    45.     string(3) "460"
    46.   }
    47. }
     
  7. kowapos

    kowapos Активный пользователь

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    всем спасибо
    Код (PHP):
    1.    $re = "/(.*?)<img(.*?)>(.*?)/ism";  
    2.    preg_match_all($re, $post, $matches);
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    регулярка капризная штука. банальные переводы строки могут поломать программу. а что если битые контейнеры будут? а если плохо экранированные данные? в этом плане любой инструмент работающий с деревом дает преимущество - дерево автоматически можно попытаться восстановить, адресация не меняется от кол-ва переносов строк и табуляций. если изменился формат данных то меняется описание пути к данным. а в случае с релугяркой как ты понимаешь надо ответственно переписывать патерн. и да, xml и его производные уже иметь необходимые инструменты для работы с ними. не надо составлять для этого регулярки. тем более если познаний в регулярках ноль. ты же не разбираешь json посредством регулярок? а чо так? там же тоже вполне фиксированный формат лексем.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.097
    Симпатии:
    1.241
    Адрес:
    там-сям
    Код (PHP):
    1. $xml = simplexml_load_string($text);
    2. $array = array_map('strval', $xml->xpath('/p/xpageslider/photos/img/@src'));
    3. var_dump($array); 
    xpath() очень удобная штука, но она возвращает массив объектов типа SimpleXMLElement, а не строки. поэтому понадобилось к каждому элементу массива применить strval()

    на выходе:
    Код (PHP):
    1. array(3) {
    2.   [0] =>  string(77) "http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/862/49268.jpg"
    3.   [1] =>  string(83) "http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/795/5951184-gol.jpg"
    4.   [2] =>  string(91) "http://admin.insider.xpage.com.ua/wp-content/uploads/2015/10/19/812/ee0df52-kmax-4311-1.jpg"
    5. } 
     
  10. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    не знаю, я тут делал программу на C# она парсила разные сайты, получала определённые данные и записывала в файл, так вот на каждом сайте эти данные были в разных тегах и тому подобное, так же в программу надо было регулярно добавлять новые сайты, я сделал все это через регулярные выражения и все пахало как часы.

    а так с добавлением каждого нового сайта или изменение данных надо было бы в ручную дописывать код и по новой компилировать, если использовать дерево.
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    /<img[^>]+\/>/i