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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена разных ссылок preg_replace

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как правильно составить регулярку
filkeith
Отправлено: 23 Января, 2013 - 16:38:41
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Добрый день\вечер\утро.
Такой вопрос, есть какой то кусок текста с ссылкой на какую то страницу и ссылкой на картинку, нужно заменить простую ссылку на кликабельную, а ссылку на картинку на саму картинку.
Т.е. например оригинал:
Цитата:
бла бла бла 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);

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

Помогите составить правильную регулярку. Или может какой то более удобный способ подскажите?
Спасибо.
 
 Top
filkeith
Отправлено: 24 Января, 2013 - 09:54:56
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Мде, вяло тут нынче.
Для замены ссылок на изображения по этим ссылкамс сделал так:
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);

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

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

(Отредактировано автором: 24 Января, 2013 - 10:41:20)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB