PHP正则表达式文本URL到HTML链接

Kyl*_*oss 1 php regex url preg-replace

我工作的一个项目,我需要从任何地方替换文本的URL domain.comwww.domain.comhttp(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));
Run Code Online (Sandbox Code Playgroud)

Luk*_*son 6

我为此创建了一组非常基本的正则表达式.不要指望它们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 ) );
Run Code Online (Sandbox Code Playgroud)