2012-04-28 61 views
0

我有一個正則表達式,它需要一個像bbcode這樣的字符串並將其轉換爲html鏈接。它工作正常。但是,我想讓它檢測鏈接的類型(內部/外部),以決定是否嚴格使用絕對(外部)網址,如http://extsite.com/category/keyword/或使用內部網址的一部分,如category/keyword/,並將其附加到預定義的網址$url . category/keyword/使用preg替換格式的URL

正則表達式如下:

preg_replace('/\[([^\]]+)\]\[([^\]"]+)\]/i', '<a href="$2">$1</a>', $text) 

任何建議將非常理解的。

+1

如何定義內部鏈接?是不是以'http://'開頭的任何鏈接? – Aziz 2012-04-28 09:49:30

+0

是的,也許這可以工作 – medk 2012-04-28 09:58:47

回答

1

根據您的評論,我將假定任何以http://(或任何類似協議,例如ftp://)開頭的鏈接都是絕對鏈接。任何其他鏈接將被視爲相對鏈接(並且將以$ url爲前綴)

// replace absolute links 
$text = preg replace ('/\[([^\]]+)\]\[([A-Za-z]+:\/\/[^\]"]+)\]/i', 
         '<a href="$2">$1</a>', $text) 


// replace all remaining (relative) links 
// $url must have a tailing slash '/' 
$text = preg replace ('/\[([^\]]+)\]\[([^\]"]+)\]/i', 
         '<a href="'.$url.'$2">$1</a>', $text) 
+0

好的我已經做到了,但用https?而不是[A-Za-z] +,但你的例子似乎更好,因爲我的不支持http和https以外的協議。謝謝。 – medk 2012-04-28 10:37:17

+0

'//'相對協議如何?它仍算作外部鏈接'// google.com'是一個有效的外部URL。 – 2012-04-28 11:23:43

+0

@Truth:可以修改正則表達式。正如我所說,這取決於「外部」和「內部」鏈接的定義 – Aziz 2012-04-28 11:38:13