2013-01-18 102 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個字符等),所以我只是想我會給你最匹配的最簡單模式。