Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Замена разных ссылок preg_replace
Форумы портала PHP.SU » » Вопросы новичков » Замена разных ссылок preg_replace

Страниц (1): [1]
 

1. filkeith - 23 Января, 2013 - 16:38:41 - перейти к сообщению
Добрый день\вечер\утро.
Такой вопрос, есть какой то кусок текста с ссылкой на какую то страницу и ссылкой на картинку, нужно заменить простую ссылку на кликабельную, а ссылку на картинку на саму картинку.
Т.е. например оригинал:
Цитата:
бла бла бла http:\\anysite.ru бла бла бла бла http:\\othersite.ru\images\3242\logo.png бла

И должно на выходе получиться так
Цитата:
бла бла бла <a href="http:\\anysite.ru">anysite.ru</a> бла бла бла бла <img src="http:\\othersite.ru\images\3242\logo.png"/> бла

С регулярками туго, пол дня эксперементировал в итоге ни чего не получается. Что бы менять ссылки нагуглил это, и это работает (рабочий кусок)
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace("/(http:\/\/)?([a-zA-Z0-9\-.]+\.[a-zA-Z0-9\-]+([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*)/", '<a href="http://$2">$2</a>', $text);

Пытался модифицировать его же для картинок, но так и не вышло, не обрабатывает он мое условие что в конце должен быть определеный формат файла и все ссылки меняет на картинки (не рабочий куоск)
PHP:
скопировать код в буфер обмена
  1. $text=preg_replace("/(http:\/\/)?([a-zA-Z0-9\-.]+\.[a-zA-Z0-9\-]+([\/]([a-zA-Z0-9_\/\-.?&%=+])*)(\/[a-zA-Z0-9](\.jpg|\.png|\.gif|\.bmp))?)/", '<img src="http://$2"/>', $text);


Так же 2ой вопрос, так как текст будет прогоняться сначала через одну, затем через другую, надо как то огородится, ибо один и тот же кусок заменяется. Думал сделать, так. Сначала прогоняем через функцию которая подсовывает картинки вместо ссылок затем прогоняем через функцию которая меняет простые ссылки на кликабельные. А что бы вторая функция не разрывала тэг картинки и всё не портила, думал сделать что если ссылка начинается с src=" то заменять не надо. Думал сделать это так
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace("/(!src=\")(http:\/\/)?([a-zA-Z0-9\-.]+\.[a-zA-Z0-9\-]+([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*)/", '<a href="http://$2">$2</a>', $text);

но не работает это.

Помогите составить правильную регулярку. Или может какой то более удобный способ подскажите?
Спасибо.
2. filkeith - 24 Января, 2013 - 09:54:56 - перейти к сообщению
Мде, вяло тут нынче.
Для замены ссылок на изображения по этим ссылкамс сделал так:
PHP:
скопировать код в буфер обмена
  1. $sometext=preg_replace("/(http:\/\/)?([a-zA-Z0-9\-.]+\.[a-zA-Z0-9\-]+([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*)(\.jpg|\.png|\.gif|\.bmp)/", '<img src="http://$2$5"/>', $sometext);


А влот как сделать отрицание, пока не разобрался, что бы есои ссылка начинается с кавычки "http://... или 'http://... не заменялась она. Это на тот случай когда ссылка уже заменена тэгом вида <img src="http://...

upd:

В общем сделал так
PHP:
скопировать код в буфер обмена
  1. $sometext = preg_replace("/[^\=\"](http:\/\/)?([a-zA-Z0-9\-.]+\.[a-zA-Z0-9\-]+([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*)/", '<a href="http://$2">$2</a>', $sometext);

Теперь заменяет все ссылки кроме тех, что начинаются с "

Всем спасибо, сам спросил, сам ответил.

 

Powered by ExBB FM 1.0 RC1