好吧,我解決了這個問題。感謝@ Cyborgx37和@MikeBrant的幫助。這是解決方案。
首先我替換爲若昂卡斯特羅在這個問題中使用的我的正則表達式模式:Making a url regex global
與該模式的問題是它捕獲在端部的任何尾隨的點,所以在圖案的最後一節我添加^.
使最後的部分看起來像這樣[^\s^.]
。當我閱讀它時,不要匹配尾部空格或點。
這仍然引起如我上面提到的匹配的bbcode一個問題,所以就用preg_replace_callback()和create_function()過濾出來。最後create_function()看起來是這樣的:
create_function('$match','
$match[0] = preg_replace("/\[\/?(.*?)\]/", "", $match[0]);
$match[0] = preg_replace("/\<\/?(.*?)\>/", "", $match[0]);
$m = trim(strtolower($match[0]));
$m = str_replace("http://", "", $m);
$m = str_replace("https://", "", $m);
$m = str_replace("ftp://", "", $m);
$m = str_replace("www.", "", $m);
if (strlen($m) > 25)
{
$m = substr($m, 0, 25) . "...";
}
return "<a href=\"$match[0]\" target=\"_blank\">$m</a>";
'), $string);
測試到目前爲止正在尋找好的,所以我很高興它現在解決了。
再次感謝,我希望這可以幫助別人:)
你能在平實的語言您匹配的標準是什麼解釋?您是否打算簡單地捕獲URL的部分,直到存在非法字符(即URL中不允許),因爲您的URL不一定具有空格後面的空格? –
@MikeBrant簡單來說,我只想捕捉一個url,只要它不以句號或逗號結尾。所以http://mydomain.com/page會很好,但是http://mydomain.com/page。會失敗。它的目的是成爲一個CMS的一部分,我也張貼了這個問題(DOH!)中,我發現這個問題的一個新的長度模式的形式後不久,找到一個解決方案:[鏈接](HTTP://計算器。com/questions/12352635/making-a-url-regex-global/14410248#14410248) – mattauckland
你應該回答你的問題**到你的問題**,而不是別人的問題。 – JDB