2012-04-02 52 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);