Текстовое URL-адрес регулярного выражения PHP для HTML-ссылки

Я работаю над проектом, где мне нужно заменить текстовые URL-адреса от domain.com на www.domain.com до http(s)://www.domain.com и адреса электронной почты в соответствующий html <a> тег. В прошлом я использовал отличное решение, но использовал теперь обесцененную функцию eregi_replace . Кроме того, регулярное выражение, используемое для такой функции, не работает с preg_replace .

Таким образом, пользователь вводит сообщение, в котором может / не может содержать адрес ссылки / электронной почты, и мне нужно регулярное выражение, которое работает с preg_replace чтобы заменить эту ссылку / электронную почту с помощью HTML-ссылки, такой как <a href="link">link</a> .

Обратите внимание, что у меня есть несколько других preg_replaces. Ниже приведен мой текущий код для других замен.

 $patterns = array('~\[@([^\]]*)\]~','~\[([^\]]*)\]~','~{([^}]*)}~','~_([^_]*)_~','/\s{2}/'); $replacements = array('<b class="reply">@\\1</b>','<b>\\1</b>','<i>\\1</i>','<u>\\1</u>','<br />'); $msg = preg_replace($patterns, $replacements, $msg); return stripslashes(utf8_encode($msg)); 

Для этого я создал очень простой набор регулярных выражений. Не ожидайте, что они будут на 100% надежными, и вам, возможно, придется их подстраивать по ходу дела.

 $pattern = array( '/((?:[\w\d]+\:\/\/)?(?:[\w\-\d]+\.)+[\w\-\d]+(?:\/[\w\-\d]+)*(?:\/|\.[\w\-\d]+)?(?:\?[\w\-\d]+\=[\w\-\d]+\&?)?(?:\#[\w\-\d]*)?)/' , # URL '/([\w\-\d]+\@[\w\-\d]+\.[\w\-\d]+)/' , # Email '/\[@([^\]]*)\]/' , # Reply '/\[([^\]]*)\]/' , # Bold '/\{([^}]*)\}/' , # Italics '/_([^_]*)_/' , # Underline '/\s{2}/' , # Linebreak ); $replace = array( '<a href="$1">$1</a>' , '<a href="mailto:$1">$1</a>' , '<b class="reply">@$1</b>' , '<b>$1</b>' , '<i>$1</i>' , '<u>$1</u>' , '<br />' ); $msg = preg_replace( $pattern , $replace , $msg ); return stripslashes( utf8_encode( $msg ) );