Подсветка урл в строке средствами php

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
  );
}
 
Сверху