Проблема с регулярным выражением

Rigor

Профессор
Регистрация
1 Июн 2008
Сообщения
203
Реакции
35
Есть такая строка:
HTML:
'<div id="img-in-news"><img alt="Большой частный дом" title="Большой частный дом" src="/files/images/6.2012/dd2e7a746c216dd69f9fbf1a0bc0c33d.jpg" /><img alt="Большой частный дом" title="Большой частный дом" src="/files/images/6.2012/a6182a9c2fb69951ae6d9416e6c29be2.jpg" />

Нужно заменить все alt и title на новые значения. Как это сделать? Пробовал так:
PHP:
 preg_replace('/<img alt="(.*)" title="(.*) src="/','<img alt="123" title="123" src=',$text );

Но заменяется только последний <img>. Все остальное удаляется.
 
PHP:
$text='<div id="img-in-news"><img alt="Большой частный дом" title="Большой частный дом" src="/files/images/6.2012/dd2e7a746c216dd69f9fbf1a0bc0c33d.jpg" /><img alt="Большой частный дом" title="Большой частный дом" src="/files/images/6.2012/a6182a9c2fb69951ae6d9416e6c29be2.jpg" />';
echo htmlspecialchars($text)."<br><br>";

echo htmlspecialchars(preg_replace('/<img alt="[^"]*" title="[^"]*" src=/','<img alt="123" title="123" src=',$text ));

ps Для просмотра ссылки Войди или Зарегистрируйся - полезная штука для тестов regexp на php
 
PHP:
preg_replace('/<img alt=\"(.*?)\" title=\"(.*?)\" src="/','<img alt="123" title="123" src=',$text );
просто жадность настрой
 
PHP:
preg_replace('/<img alt=\"(.*?)\" title=\"(.*?)\" src="/','<img alt="123" title="123" src=',$text );
просто жадность настрой
для приведенного примера прокатит, а вот попадутся иные входные данные и придется долго голову ломать - почему на выходе получается какая-то хрень.

PHP:
$text='<div id="img-in-news"><img alt="Большой частный дом1" src="/files/images/6.2012/home1.jpg" />тут еще куча кода/текста<img alt="Большой частный дом2" title="Большой частный дом2" src="/files/images/6.2012/home2.jpg" /><img alt="Большой частный дом3" title="Большой частный дом3" src="/files/images/6.2012/home3.jpg" />';
echo htmlspecialchars($text);

# c "настроенной" жадностью полностью пропадает часть html
echo '<br><br>вариант с "настроенной жадностью" => непредвиденная потеря текста<br>';
echo htmlspecialchars(preg_replace('/<img alt=\"(.*?)\" title=\"(.*?)\" src="/','<img alt="123" title="123" src=',$text ));

echo '<br><br>вариант с ограничителем кавычек<br>';
echo htmlspecialchars(preg_replace('/<img alt="[^"]*" title="[^"]*" src=/','<img alt="123" title="123" src=',$text ));
=>
HTML:
<div id="img-in-news"><img alt="Большой частный дом1" src="/files/images/6.2012/home1.jpg" />тут еще куча кода/текста<img alt="Большой частный дом2" title="Большой частный дом2" src="/files/images/6.2012/home2.jpg" /><img alt="Большой частный дом3" title="Большой частный дом3" src="/files/images/6.2012/home3.jpg" />

вариант с "настроенной жадностью" => непредвиденная потеря текста
<div id="img-in-news"><img alt="123" title="123" src=/files/images/6.2012/home2.jpg" /><img alt="123" title="123" src=/files/images/6.2012/home3.jpg" />

вариант с ограничителем кавычек
<div id="img-in-news"><img alt="Большой частный дом1" src="/files/images/6.2012/home1.jpg" />тут еще куча кода/текста<img alt="123" title="123" src="/files/images/6.2012/home2.jpg" /><img alt="123" title="123" src="/files/images/6.2012/home3.jpg" />
 
Назад
Сверху