dmvlad
Новичок
Нужно обработать строку и вставить везде ссылки, где найдено совпадение по регулярке. Функция есть, работает хорошо, но если сразу после текста подсвечиваемой ссылки идет знак < , т.е. тег к примеру перевода строки или закрытия пункта списка (LI), то отрабатывает не корректно. Как добавить в регулярку окончание выделения строки, если такой тег попадает?
Сам код тут
Сам код тут
Код:
$text = 'Ссылка: (http://microsoft.com), www.ru?"a"=b, http://abc.net.<br>
<ul><li> http://www.ya.ru</li></ul>';
echo hrefActivate($text);
// Функция обратного вызова для preg_replace_callback().
function hrefCallback($p) {
// Преобразуем спецсимволы в HTML-представление.
$name = htmlspecialchars($p[0]);
// Если нет протокола, добавляем его в начало строки.
$href = !empty($p[1])? $name : "http://$name";
// Формируем ссылку.
return "<a href=\"$href\" target=\"_blank\">$name</a>";
}
// Заменяет ссылки на их HTML-эквиваленты ("подчеркивает ссылки").
function hrefActivate($text) {
return preg_replace_callback(
'{
(?:
(\w+://) # протокол с двумя слэшами
| # - или -
www\. # просто начинается на www
)
[\w-]+(\.[\w-]+)* # имя хоста
\S* # URI (но БЕЗ кавычек)
(?: # последний символ должен быть...
(?<! [[:punct:]|<] ) # НЕ пунктуацией
| (?<= [-/&+*] ) # но допустимо окончание на -/&+*
)
}xi',
"hrefCallback",
$text
);
}