使用正则表达式替换内容中的链接和超链接

时间:2012-08-21 15:20:02

标签: php regex preg-replace

我有一个包含用户博客内容的字符串。如果它们包含以下内容:

www.google.com
http://google.com
http://www.google.com

在他们的博客文章中,我希望PHP用真正的超链接替换这些事件,但保留原始子字符串(即不要将www.google.com更改为http://www.google.com)。

有人知道如何用PHP和正则表达式做到这一点吗?我试过这个:

echo preg_replace('/((www|http:\/\/)[^ ]+)/', '<a href="$1" target="_blank">$1</a>', $content);

但是如果你用空格结束链接,这只会成功。如果以逗号或句号结尾,则会失败。

2 个答案:

答案 0 :(得分:3)

preg_replace('/\b(?:(http(s?):\/\/)|(?=www\.))(\S+)/is',
             '<a href="http$2://$3" target="_blank">$1$3</a>',
             $content); 

答案 1 :(得分:0)

$pattern = '/<a (.*?)href=[\"\'](.*?)\/\/(.*?)[\"\'](.*?)>(.*?)<\/a>/i';
$new_content = preg_replace($pattern, '$5', $content);