[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярка по преобразованию текстовых ссылок
Страницы: 1, 2
filomax
Всем привет, в общем есть регулярка, она делает свое дело, но не так как хотелось бы.
Указывать все символы, после которых заканчивается ссылка, наверное не очень хорошая идея, может есть у вас что на примете?
Я уже весь инет обшерстил, ничего толкового не нашел.
Буду благодарен за помощь.

Вот регулярка

preg_replace("/(?<!\")(http|ftp):\\/\\/(\\S+)/si",'<a href="\\1://\\2">http://\\2</a>',$text);


Такой текст
Цитата
Привет я на http://test.ru, надоело сидеть на http://test.com<br /> и т.д)


Превращает в такой
Привет я на <a href="http://test.ru,">http://test.ru,</a> надоело сидеть на <a href="http://test.com<br">http://test.com<br</a> /> и т.д) 


Собственно хочется чтобы запятые были вне ссылки и уж тем более тег не разрывался.

Спасибо
filomax
Вот кстати прикол смотрите, этот форум тоже тег разрезал и запихнул в ссылку.
zelenuy
Цитата
Привет я на http://test.ru, надоело сидеть на http://test.com<br /> и т.д)

А теперь нарисуйте ручками, что вы хотите из этого сделать а то я не совсем понял суть вопроса smile.gif
filomax
Цитата (zelenuy @ 18.02.2014 - 17:27)
Цитата
Привет я на http://test.ru, надоело сидеть на http://test.com<br /> и т.д)

А теперь нарисуйте ручками, что вы хотите из этого сделать а то я не совсем понял суть вопроса :)

Должно получиться вот что

Привет я на <a href="http://test.ru">http://test.ru</a>, надоело сидеть на <a href="http://test.com">http://test.com</a><br /> и т.д)
filomax
Короче вот ответ


$hostRegex = "([a-z\d][-a-z\d]*[a-z\d]\.)*[a-z][-a-z\d]*[a-z]";
$portRegex = "(:\d{1,})?";
$pathRegex = "(\/[^?<>#\"\s]+)?";
$queryRegex = "(\?[^<>#\"\s]+)?";

$urlRegex = "/(?:(?<=^)|(?<=\s))((ht|f)tps?:\/\/" . $hostRegex . $portRegex . $pathRegex . $queryRegex . ")/";

$sample1 = preg_replace($urlRegex, "<a href=\"\\1\">\\1</a>", $str);
filomax
Только косяк тут есть небольшой. Если после ссылки запятая, то она уходит в ссылку. Как убрать?
zelenuy
filomax
У меня и с запятой работает, не чего не попадает в ссылку
filomax
Странно, ну ладно)
BaNru
Регулярка с ошибкой
Попробуйте любой из урлов
http://example.com/,
http://example.com//
http://example.com/

http://regex101.com/r/fZ6rW0
zelenuy
Да слэшь в конце все ломает
zelenuy
Вот вроде работает :rolleyes:
<?php
header('Content-Type: text/html; charset=utf-8');
$str = 'http://example.com/,';
$hostRegex = "([a-z\.\\/]+)";
$portRegex = "(:\d{1,})?";
$pathRegex = "(\/[^?<>#\"\s]+)?";
$queryRegex = "(\?[^<>#\"\s]+)?";
$urlRegex = "/(?:(?<=^)|(?<=\s))((ht|f)tps?:\/\/" . $hostRegex . $portRegex . $pathRegex . $queryRegex . ")/";

echo preg_replace($urlRegex, "<a href=\"\$1\">\$1</a>", $str);
BaNru
И всё равно регулярка неправильная )))
http://ideone.com/krcg6k
третья строка
zelenuy
BaNru
Ну регулярка эта целая наука smile.gif тут надо сидеть думать пробовать
zelenuy
Может это пойдет
<?php
header('Content-Type: text/html; charset=utf-8');
$str = 'Тра та та http://example.com?name=15, тра ля ля';
$reg = '|(https?:\/\/[a-z\.\/]+([\?a-z\=\-0-9\&]+)?)|is';

echo preg_replace($reg, "<a href=\"\$1\">\$1</a>", $str, 1);
BaNru
Тоже ошибка )
http://ideone.com/L5qXAy
Быстрый ответ:

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