За последние 24 часа нас посетили 17575 программистов и 1314 роботов. Сейчас ищут 1482 программиста ...

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

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

  1. Kylaksizov

    Kylaksizov Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Добрый день уважаемые программисты. В интернете полно примеров, как получить все пути всех изображений на странице, но скрипт получает только пути с тегов <img>.
    У меня же на странице есть и такие <div style="background:url(http://сайт.ru/upload/и-тут-много-папок-может-быть/img.png)"></div>

    Вот сам скрипт:
    Код (Text):
    1. $images = array();
    2. preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $data, $media);
    3. unset($data);
    4. $data = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);
    5.  
    6. foreach ($data as $url) {
    7.     $info = pathinfo($url);
    8.     if (isset($info['extension'])) {
    9.         if (($info['extension'] == 'jpg') ||
    10.                 ($info['extension'] == 'jpeg') ||
    11.                 ($info['extension'] == 'gif') ||
    12.                 ($info['extension'] == 'png'))
    13.             array_push($images, $url);
    14.     }
    15. }
    16.  
    17. echo "<pre>";
    18. print_r($images);
    19. echo "<pre>";
    Помогите пожалуйста с решением, как получить абсолютно все картинки. Я уже изучал регулярки и уже два дня мучаюсь и всё никак. Может есть другое решение?

    Добавлено спустя 21 минуту 46 секунд:
    Не можете помочь?
    Хотя бы напишите регулярное выражение на это (http://сайт.ru/upload/и-тут-много-папок-может-быть/img.png)
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Код (PHP):
    1. $pattern = '/https?:\/\/\S+\.(png|jpe?g|gif)/i'; 
    Или так:
    Код (PHP):
    1. $pattern = '/(?!\"|\')https?://[a-z0-9\-\.\/]+\.(?:jpe?g|png|gif)(?!\"|\')/i';
     
  3. Kylaksizov

    Kylaksizov Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Делаю вот так, но ничего не выходит:
    Код (Text):
    1. preg_match('/https?:\/\/\S+\.(png|jpe?g|gif)/i', $data, $media);
    2.  
    3.     echo "<pre>";
    4.     print_r($media);
    5.     echo "<pre>";
    Выводит только одну картинку и всё.

    Добавлено спустя 2 минуты 29 секунд:
    Прошу прощения, всё супер получилось, класс, если что могу помочь с обфускацией в IonCube последней версии лицензионной, обращайтесь, только для вас.

    Добавлено спустя 11 минут 20 секунд:
    Есть некоторые повторения, непонятно почему(
    [​IMG]
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Вы уверены, что на странице все url уникальны? Для того же бекграунда может использоваться одно изображение в нескольких элементах.
    P.S. В конце концов:

    Код (PHP):
    1. preg_match_all('/https?:\/\/\S+\.(png|jpe?g|gif)/i', $data, $media);
    2. $uniqueArr = array_unique($media[0]); 
     
  5. Kylaksizov

    Kylaksizov Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Вы идеальный))) Точно, я протупил, а ещё в личку написал...
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Это любовь!
     
  7. Kylaksizov

    Kylaksizov Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    нет, просто человек не писал типа ищи в гугле, а сразу дал чёткий ответ, человек просто супер! Это не любовь)))
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Просто, чел тронулся или упоролся и наверно даже не знает, что всего то нужно было дать ссылку php.net/manual/ru/class.domdocument.php
    Не простая любовь у вас, а с первого поста :D