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

Тема в разделе "Как сделать...", создана пользователем Rigor, 16 июл 2012.

  1. Rigor

    Rigor

    Регистр.:
    1 июн 2008
    Сообщения:
    202
    Симпатии:
    33
    Есть такая строка:
    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>. Все остальное удаляется.
     
  2. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    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 http://regexpr.ru/ - полезная штука для тестов regexp на php
     
    Rigor нравится это.
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.035
    Симпатии:
    703
    PHP:
    preg_replace('/<img alt=\"(.*?)\" title=\"(.*?)\" src="/','<img alt="123" title="123" src=',$text );
    просто жадность настрой
     
    Rigor нравится это.
  4. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    для приведенного примера прокатит, а вот попадутся иные входные данные и придется долго голову ломать - почему на выходе получается какая-то хрень.

    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" />