Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Рег. выражение для ссылки, как сделать
 
 автор: Visavi   (06.04.2008 в 23:33)   письмо автору
 
 

Подскажите пожалуйста регулярное выражение чтобы можно было преобразовать ссылку типа

http://site.ru
и
название

чтобы эти ссылки преобразовались в <a href ..>..</a>
просто не получается совместить одно с другим
или первое регулярное выражение мешает второму или наоборот

   
 
 автор: Atheist   (07.04.2008 в 00:04)   письмо автору
 
   для: Visavi   (06.04.2008 в 23:33)
 

Запихни всё в один паттерн. А в качестве обработчика поставь какую-то функцию.

   
 
 автор: Visavi   (07.04.2008 в 00:16)   письмо автору
 
   для: Atheist   (07.04.2008 в 00:04)
 

блин неправильно написал
http://site.ru
и
[ url = http://site.ru ] название [ /url]
а то форум обработал теги
если бы я умел с регулярными выражениями обращаться я бы не писал тут

   
 
 автор: Faraon   (07.04.2008 в 12:07)   письмо автору
 
   для: Visavi   (07.04.2008 в 00:16)
 

Как-то так
<?php
$text
="http://site.ru text [url = http://site.ru/]название[/url]";
$e=preg_replace("#(http://(www.)?[0-9a-z\.-]+\.[a-z]{2,6}[0-9a-z/\?\._-]*)\s#i","<a href=\"$1\">$1</a> ",$text);
$e=preg_replace("#\[url = ([^\]]+)\](.*?)\[/url\]#","<a href=\"$1\">$2</a>",$e);
print 
$e;
?>

   
 
 автор: Atheist   (07.04.2008 в 15:25)   письмо автору
 
   для: Faraon   (07.04.2008 в 12:07)
 

$text = 'http://example.com/path-ссылка http://example.com/';

Результат кода Faraon'а:

http://example.com/path-ссылка http://example.com/

Ничего не изменилось. Пробельный символ в конце - потрясяющее условие.

   
 
 автор: Visavi   (07.04.2008 в 17:12)   письмо автору
 
   для: Atheist   (07.04.2008 в 15:25)
 

Atheist если вы можете подскажите как сделать
а я то думал почему у меня то работает то нет, оказывается \s означает пробельный символ

   
 
 автор: Faraon   (07.04.2008 в 17:30)   письмо автору
 
   для: Visavi   (07.04.2008 в 17:12)
 

Вот подправил
<?php
$text
="http://site.ru text [url = http://site.ru/]название[/url]";
print 
preg_replace("#(\[url = ([^\]]+)\](.*?)\[/url\])|(http://(www.)?[0-9a-z\.-]+\.[a-z]{2,6}[0-9a-z/\?=&\._-]*)#","<a href=\"$2\">$3</a><a href=\"$4\">$4</a>",$text);
?>

   
 
 автор: Atheist   (07.04.2008 в 17:50)   письмо автору
 
   для: Faraon   (07.04.2008 в 17:30)
 

> <a href=\"$2\">$3</a><a href=\"$4\">$4</a>

*Улюлюкает*

   
 
 автор: Visavi   (07.04.2008 в 20:10)   письмо автору
 
   для: Faraon   (07.04.2008 в 17:30)
 

если переставить ссылки, то код будет выглядеть примерно так

<a href="http://site.ru/">название</a><a href=""></a> <a href=""></a><a href="http://site.ru">http://site.ru</a>

   
 
 автор: Atheist   (07.04.2008 в 20:41)   письмо автору
 
   для: Visavi   (07.04.2008 в 20:10)
 

Короче, вот так можно:

<?php
function _anchor($m)
{
    if( !isset(
$m[3]) )
    {
        return 
'<a href="' $m[1] . '">' $m[2] . '</a>';
    }
    else
    {
        return 
'<a href="' $m[3] . '">' $m[3] . '</a>';        
    }
}

$s 'http://site.ru text название';

$s preg_replace_callback('~\\[url=(http://.+?)\\](.+?)\\[/url\\]|(http://\\S+)~''_anchor'$s);

echo 
$s;


Обрати внимание на "http://\\S+" - заменишь на свой паттерн для замены URL. Этот в качестве заглушки стоит.

   
 
 автор: Visavi   (08.04.2008 в 00:52)   письмо автору
 
   для: Atheist   (07.04.2008 в 20:41)
 

спасибо все работает отлично сделал вот так
<?php  
$message 
preg_replace_callback('~\\[url=(http://.+?)\\](.+?)\\[/url\\]|(http://(www.)?[0-9a-z\.-]+\.[a-z]{2,6}[0-9a-z/\?\.\~&amp;_=/%-:#]*)~''_anchor'$message); 

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования