我正在开展一个项目,我需要将文字网址从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));
答案 0 :(得分: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 ) );