好吧,我解决了这个问题。感谢@ 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