Регулярка -- src всех картинок в тексте

Ragnarok
На сайте с 25.06.2010
Offline
226
1540

Нужно регуляркой выбрать src всех картинок в тексте

делаю так:

preg_match_all('#<img\s+src\s*=\s*["\']?(.*)#i',$content,$imgurls);

Проблема в том, что если 2 и более картинок идут подряд в одной строке,- скрипт выдаёт строку целиком.

$content="<p>тексттексттекст</p>
<p><img src=\"http://site.ru/images/1.jpg\" style=\"width:121pt;height:71pt;\" /><img src=\"http://site.ru/images/2.jpg\" style=\"width:110pt;height:34pt;\" /></p>
<p>тесттекст</p><p><img src=\"http://site.ru/images/3.jpg\" style=\"width:90pt;height:18pt;\" /></p><p>В проекциях на ось х это уравнение запишется в виде</p><p><img src=\"http://site.ru/images/4.jpg\" style=\"width:162pt;height:12pt;\" /><img src=\"http://site.ru/images/5.jpg\" style=\"width:269pt;height:38pt;\" /></p>";

результат

array(2) {
[0]=>
array(2) {
...
}
[1]=>
array(2) {
[0]=>
string(142) "http://site.ru/images/1.jpg" style="width:121pt;height:71pt;" /><img src="http://site.ru/images/2.jpg" style="width:110pt;height:34pt;" /></p>"
[1]=>
string(322) "http://site.ru/images/3.jpg" style="width:90pt;height:18pt;" /></p><p>В проекциях на ось х это уравнение запишется в виде</p><p><img src="http://site.ru/images/4.jpg" style="width:162pt;height:12pt;" /><img src="http://site.ru/images/5.jpg" style="width:269pt;height:38pt;" /></p>"
}
}

вместо нужного мне

array(2) {
[0]=>
array(5) {
...
}
[1]=>
array(5) {
[0]=>
string(27) "http://site.ru/images/1.jpg"
[1]=>
string(27) "http://site.ru/images/2.jpg"
[2]=>
string(27) "http://site.ru/images/3.jpg"
[3]=>
string(27) "http://site.ru/images/4.jpg"
[4]=>
string(27) "http://site.ru/images/5.jpg"
}
}

И второй вопрос: как ограничить вывод только содержимым параметра src?

если картинки в одной строке,

preg_match_all('#<img\s+src\s*=\s*"(.*)"#i',$content,$imgurls);

выдаёт

array(5) {
[0]=>
string(60) "http://site.ru/images/1.jpg" style="width:121pt;height:71pt;"
...

если же вставляю

preg_match_all('#<img\s+src\s*=\s*"(.*)" style#i',$content,$imgurls2);

то нормально, но после src не обязательно может быть style

---------- Добавлено 29.02.2012 в 13:09 ----------

нашёл:


preg_match_all('#src=("|\')[^"\'>]+#i',$content,$imgurls);

правда, она выдаёт результат в виде

array(5) {
[0]=>
string(32) "src="http://site.ru/images/1.jpg"
//TODO: перестать откладывать на потом
siv1987
На сайте с 02.04.2009
Offline
427
#1

I.

#<img\s+src\s*=\s*["\']?(.*?)["\']#

II.

#<img\s+src\s*=\s*["\']?([^"\']+)#

Ragnarok
На сайте с 25.06.2010
Offline
226
#2
siv1987:
I.
#<img\s+src\s*=\s*["\']?(.*?)["\']#

II.
#<img\s+src\s*=\s*["\']?([^"\']+)#

Спасибо! первый вариант сработал.

Что если в тексте между <img и src могут быть атрибуты вроде width="13%", как это обыграть?

---------- Добавлено 29.02.2012 в 13:26 ----------

preg_match_all('#src\s*=\s*["\']?(.*?)["\']#',$content,$imgurls);

выдаёт, но мало ли.. скрипт какой в тексте проскользнёт

J
На сайте с 20.07.2010
Offline
72
#3

сделай через dom

$document = new DOMDocument();

$document->loadHTML($buffer);

foreach($document->getElementsByTagName('img') as $img) {

$src []= $img->getAttribute('src');

}

siv1987
На сайте с 02.04.2009
Offline
427
#4

#<img[^>]+?src=["\']?(.*?)["\']#

#<img(.+?)src=["\']?(.+?)["\']#

gormarket
На сайте с 29.12.2010
Offline
47
#5

Ragnarok, кажется такой вариант решит все Ваши вопросы

preg_match_all('#<img[^>]+src\s*=\s*(["\'])([^\s"\']+)\\1#im',$content,$imgurls);

print '<pre>';

print_r($imgurls[2]);

print '</pre>';

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Ragnarok
На сайте с 25.06.2010
Offline
226
#6
siv1987:
#<img[^>]+?src=["\']?(.*?)["\']#

#<img(.+?)src=["\']?(.+?)["\']#

спасибо! такой работает, но вариант

gormarket:
Ragnarok, кажется такой вариант решит все Ваши вопросы

preg_match_all('#<img[^>]+src\s*=\s*(["\'])([^\s"\']+)\\1#im',$content,$imgurls);
print '<pre>';
print_r($imgurls[2]);
print '</pre>';

универсальнее. Спасибо!

Анабой Янсур
На сайте с 12.04.2011
Offline
114
#7

Попробуйте simple_html_dom parser http://simplehtmldom.sourceforge.net/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий