Как извлечь источники HTML img с помощью регулярного выражения? - PullRequest
3 голосов
/ 22 июня 2009

Мне нужно извлечь элемент src из всех тегов изображения в документе HTML.

Итак, ввод - это страница HTML, а вывод - список URL-адресов, указывающих на изображения: бывший ... http://www.google.com/intl/en_ALL/images/logo.gif

Вот что я придумал:

<img\s+src=""(http://.*?)

Это не работает для тегов, где src находится не сразу после тега img, например:

<img height="1px" src="spacer.gif">

Может ли кто-нибудь помочь завершить это регулярное выражение? Это довольно легко, но я подумал, что это может быть более быстрый способ получить ответ.

Ответы [ 4 ]

19 голосов
/ 22 июня 2009

Следующий фрагмент регулярного выражения должен работать.

<img[^>]+src="([^">]+)"

Поиск текста, начинающегося с <img, за которым следуют один или несколько символов, которые не >, а затем src=". Затем он берет все между этой точкой и следующей " или >.

Но если это вообще возможно, используйте настоящий HTML-парсер. Он более надежный и гораздо лучше справляется с крайними случаями.

10 голосов
/ 22 июня 2009

Ты не хочешь этого делать. Правильный синтаксический анализ HTML - очень сложная проблема, и регулярные выражения не являются хорошим инструментом для этого.

Смотри, например, Можете ли вы привести некоторые примеры того, почему трудно проанализировать XML и HTML с помощью регулярного выражения?

А вот для хорошего решения:

Как программно проверить HTML-документ

4 голосов
/ 22 июня 2009

Вы можете сделать это довольно легко с Javascript. Пример будет как ниже:

var images = document.getElementsByTagName("img");

for (i=0; i < images.length; i++)
{
   // get image src
   var currImage = images[i].src;

   // do link creation here
} 
1 голос
/ 03 декабря 2014

Это прекрасно работает для меня

$regexp = '<img[^>]+src=(?:\"|\')\K(.[^">]+?)(?=\"|\')';

if(preg_match_all("/$regexp/", $content, $matches, PREG_SET_ORDER)) {

    if( !empty($matches) ) {

        for ($i=0; $i <= count($matches); $i++)

        {
            $img_src = $matches[$i][0];

            echo $img_src;

        }

    }

}
...