Получаем SRC (и не только) картинок из текста с preg_match_all

Иногда бывает надо получить урлы (и не только) всех картинок в тексте (html) с какой-нибудь целью, например заменить их все на превью.
Для этого замечательно подойдёт preg_match_all, поскольку в данном случае мне надо было не только получить сами src, но и остальные атрибуты тега, чтобы заменить картинки в тексте обёртками.

$images = array();
if (preg_match_all('~<img[^>]+>~is', $html, $matches)) {
  foreach($matches[0] as $tag) {
    $image = array();
    if (preg_match_all('~(?:(src|width|height|title|alt)\s*=\s*([\'"])\s*([^\'"]*)\s*[\'"])~i', $tag, $tag_matches, PREG_SET_ORDER)) {
      foreach($tag_matches as $attr)
        $image[strtolower($attr[1])] = $attr[3];
        $images[] = $image;
      }
    }
  }
}

Только необходимо помнить, что это решение не “на лету”, поскольку regex очень сильно использует CPU.

Автор в September 9, 2011 Опубликовано в рубрике PHP regex Памятка.

Комментарии

Нет комментариев

Добавить комментарий

* обязательно к заполнению.

Имя *

Почта *

Сайт