2013-01-18 89 views
1

我试图更改字符串发生http://www.bbc.co.uk/,以便它出现在html链接内。 <a href="http://www.bbc.co.uk/">http://www.bbc.co.uk</a>转换链接中出现的链接

但是由于某种原因,我的正则表达式转换不起作用。有人能指点我正确的方向吗?

$text = "I love this website http://www.bbc.co.uk/"; 
$x = preg_replace("#[a-z]+://[^<>\s]+[[a-z0-9]/]#i", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $text); 
var_dump($x); 

输出我喜欢这个网站http://www.bbc.co.uk/(不包括HTML链接)

回答

1

你的怪异字符类是有过错:

[[a-z0-9]/] 

双括号是POSIX字符类,比如[[:digit:]]

你的意思是只写:

[a-z0-9/] 
0

使用此:

$x = preg_replace('#http://[?=&a-z0-9._/-]+#i', '<a target="_blank" href="$0">$0</a>', $text); 
0

那是因为你正则表达式是给你一个比赛(其实这真的甚至没有接近给你一个匹配因为你根本不接受域名的时间段)。尝试是这样的:

$pattern = '#https?://.*\b#i'; 
$replace = '<a href="$0" target="_blank">$0</a>'; 
$x = preg_replace($pattern, $replace, $text); 

注意,我实际上并不想在这里验证URL格式,所以我就接受如HTTP东西()://直到下一个字边界。它似乎并不是你要真正的URL验证正则表达式(即验证至少有一个.,TLD组件有2-6个字符等),所以我只是想我会给你最匹配的最简单模式。