[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: regexp
Khabibulin
Добрый день!
В общем возникла такая потребность...
В RegExp'ах я не сильно силен, но на вашу помощь понадеюсь...

Ситуация такая:
Есть текст, к примеру:

$text = "слово1 слово2 http://example.com/page1.html слово3 и тд";

мне надо регулярным выражением так обработать этот текст, чтоб мнимая ссылка стала физической в виде html...

наброски я как бы сделал:
$text = preg_replace("/(http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?)/i","<a href='$1'>$1</a>", $text);

все как бы работает, но не правильно нарезает, если текст будет примера:
$text = "слово1 слово2 http://example.com/page1.html<br />слово3 и тд";

как быть?



Спустя 57 минут, 44 секунды (15.05.2009 - 16:33) glock18 написал(а):
Думаю, что вытащить любую ссылку таким образом из любого текста, либо очень сложно, либо невозможно.

Но если после ссылки кроме пробелов могут идти только теги, то можно попробовать заменить
Код
(\/\S*)
на
Код
([^\s<]*)
.

Выражение, впрочем, кажется не особо надежным в плане выхватывания ссылок из текста - часть ссылок, очевидно будет потеряна.

PS: ты используешь модификатор i в выражение. С ним можешь не дублировать буквы обоих регистров. А [a-zA-Z0-9] можно заменить на \w. Вот примерно, что получится:

Код
(http:\/\/[\w\-\.]+\.[a-z]{2,3}([^\s<]*)?)

Спустя 5 минут, 44 секунды (15.05.2009 - 16:39) Grazor написал(а):
когда-то писал такую штуку(чуть обновил). единственное, она почему-то не тащит подряд идущие ссылки. то есть из "www.site.ru www.site.ru www.site.ru" ссылками станут первый и третий адреса. ещё подумаю над этим

PHP
<?php
//я буду использовать Perl-совместимые рег выражения
$text = preg_replace('/(^|\s|>)((http:\/\/|ftp:\/\/|htps:\/\/)?(www\.)?([-0-9a-z.\-]*\.[-0-9a-z]{2,6}(\/[-0-9a-z_?.%&#=\/]*)?))(\s|$|<|\.)/i', "$1<a href=\"http://www.$5\">$2</a>$7", $text);

получилось объёмненько, но работает tongue.gif


_____________
Чим я більше довідаюся людей, тим я більше починаю любити собак...
Україна - це моя країна і моя рідна мова!
Чим більше вип'є комсомолець - тим менше вип'є хуліган!
Усе в житті взаємозалежно: живеш - хочеться випити, випив - хочеться жити...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.