Регулярное выражение ищет адреса изображений в html

(<img)\s+(.*)(src)(\s*)(=)(\s*)([«‘]|)(ftp:\/\/|https?:\/\/|\/)([^'»\s]+)\7(\s*)(.*)>

этот пример для VB, для PHP привожу пример прогаммного кода. Особенностью будет то, что нужно квотировать и символ /, то есть вместо него будет \/

Заметьте, что квантификаторы являются «жадными», поэтому, если изображения размещены по тексту без перевода строк, то браться будет только последнее. Для того, чтобы сделать его «ленивым», добавьте «?» в конце каждого квантификатора!

$res=array();
$regEx = «/(<img)\s+(.*)(src)(\s*)(=)(\s*)([\»‘]|)(ftp:\/\/|https?:\/\/|\/)([^’\»\s]+)\7(\s*)(.*)>/i»;
preg_match_all ($regEx,$txt,$res,PREG_SET_ORDER);

в переменную $res будет помещен двумерный массив с результатом. Подробнее о функции preg_match_all  можно прочесть здесь: http://phpclub.ru/manrus/f/preg-match-all.html

Это окончательный вариант, резличает ftp://, http://, https:// и относительные адреса. В $8 попадает протокол или «/» если это относительный адрес, а в $9 сам url без протокола. URL может быть в одинарных кавычках, двойных кавычках или без кавычек. Исправлен недостаток: если написать такой «неправильный» тег, где адрес взят в кавычки таким образом, что открывается одинарная кавычка, к примеру, а закрывается двойная, этот шаблон воспринимал, как нормальную конструкцию. Теперь это исправлено.

отличным преимуществом является то, что слово » src» (пробел, затем src) могут попадаться внутри тега IMG до собственно того самого src, который и есть адресом. А это может случиться, если такой текст написать например в title илил alt и разместить по тексту перед src. Такие случаи может единичны, может нулевые, но я считаю, что если знаю о недостатке, его следует исключить.

Так что выражение

<img title=»вытяжка адреса из src=» src=»http://my.ru/img/1.jpg» alt=»Ура!»> распознается абсолютно правильно, то есть — $8=http://, $9=my.ru/img/1.jpg

примеры
<img src=»http://my.ru/img/1.jpg» alt=»Ура!»> — $8=http://, $9=my.ru/img/1.jpg

<img src=»https://my.ru/img/1.jpg» alt=»Ура!»> — $8=https://, $9=my.ru/img/1.jpg

<img src=»ftp://my.ru/img/1.jpg» alt=»Ура!»> — $8=ftp://, $9=my.ru/img/1.jpg

<img src=»/img/1.jpg» alt=»Ура!»> — $8=/, $9=my.ru/img/1.jpg

Как использовать регулярное выражение в php, asp, vb и других языках программирования, читайте в соответствующем мануале по этим языкам.

Если хотите сграбить не изображения а ссылки с разделением по протоколу, смотрите мою статью на странице http://www.bobpop.ru/?p=271

Если желаете выразить благодарность в материальном виде, смотрите wm кошельки внизу страницы.

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