За последние 24 часа нас посетили 21038 программистов и 1110 роботов. Сейчас ищет 391 программист ...

Regular exp

Тема в разделе "PHP для профи", создана пользователем S_t_e_e_p, 3 авг 2019.

  1. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Приветствую, у меня плохо с регулярками, не могу никак решить.

    Есть строка
    Код (Text):
    1. <p>Hello<img class="mceNonEditable" title=":doprigalis:" src="http://d2.loc/img/forum/emoticons/doprigalis.gif" data-smile="1" data-shortcut=":doprigalis:" alt="doprigalis.gif" /></p><br><p>Eeee<img class="mceNonEditable" title=":idisuda:" src="http://d2.loc/img/forum/emoticons/idisuda.png" data-smile="1" data-shortcut=":idisuda:" alt="idisuda.png" /></p>
    Мне нужно удалить все тэги img и на его месте оставить только то, что находиться в title остальной текст должен сохраниться.

    Сделал так:
    PHP:
    1. preg_replace('/<img(.*)title="([^"]*)"(.*)>/', '$2', $clearedText);
    Но он почему-то обрезает все после и оставляет только <p>Hello:idisuda:

    Спасибо
     
  2. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    (.*) любое количество любых символов, а нужно ограничить поиск до ближайшего ">".
    PHP:
    1. preg_replace('/<img[^>]*title="([^"]*)"[^>]*>/i', '$1', $clearedText);
    Или средствами DOMDocument.
    PHP:
    1. $html = '<p>Hello<img class="mceNonEditable" title=":doprigalis:" src="http://d2.loc/img/forum/emoticons/doprigalis.gif" data-smile="1" data-shortcut=":doprigalis:" alt="doprigalis.gif" /></p><br><p>Eeee<img class="mceNonEditable" title=":idisuda:" src="http://d2.loc/img/forum/emoticons/idisuda.png" data-smile="1" data-shortcut=":idisuda:" alt="idisuda.png" /></p>';
    2.  
    3. $doc = new DOMDocument;
    4. $doc->loadHTML($html);
    5.  
    6. $items = $doc->getElementsByTagName('img');
    7.  
    8. $i = $items->length - 1;
    9. for (; $i >= 0; $i--) {
    10.     $img = $items->item($i);
    11.     $txt = $doc->createTextNode($img->getAttribute('title'));
    12.     $img->parentNode->replaceChild($txt, $img);
    13. }
    14.  
    15. echo $doc->saveHTML();
     
    S_t_e_e_p нравится это.
  3. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Спасибо большое, работает :)