2012-04-02 47 views
0
另一個URL

我試圖得到一個字符串中的所有HTML鏈接,並使用了preg_replace到另一條鏈路取代他們(鏈路跟蹤等)轉換所有的HTML鏈接,使用PHP和正則表達式

它工作正常,像http://www.facebook.com但鏈接不是那些域擴展後有任何額外的文本 因此,第一個網址會很好,但後者不會工作 - 任何人都可以建議我如何改變我的表達,以允許這樣的兩個鏈接工作。

http://www.facebook.com 
http://www.facebook.com/profile/1242435 

$message = preg_replace("/<a([^>]+)href=\"http\:\/\/([a-zA-Z0-9\-]+\.[a-zA-Z0-9]+\.[a-zA-Z]{2,3}(\/*)?)/", "<a$1href=\"http://www.site.com/system/link_tracker.php?URL=$2&ID={$ID}\"", $message); 

回答

2
$message = preg_replace("/<a([^>]+)href=\"http\:\/\/([a-zA-Z0-9\-]+\.[a-zA-Z0-9]+\.[a-zA-Z]{2,3}(\/[^\"]*)?)/", "<a$1href=\"http://www.site.com/system/link_tracker.php?URL=$2&ID={$ID}\"", $message); 

喜歡這個? 順便說一句,域的區域可以超過3個符號。你可以用flag/i使它縮短一點

$message = preg_replace("/<a([^>]+)href=\"http\:\/\/([a-z\d\-]+\.[a-z\d]+\.[a-z]{2,5}(\/[^\"]*)?)/i", "<a$1href=\"http://www.site.com/system/link_tracker.php?URL=$2&ID={$ID}\"", $message);