【发布时间】:2017-03-23 16:45:06
【问题描述】:
所以我目前正在研究一个正则表达式,该表达式将在一个也支持 bbcode 的论坛上使用。这个正则表达式应该捕获所有以 https、http 和 www 开头的链接并将它们变成链接。
目前它捕获所有 https 和 http,但不捕获 www 的。而且我不知道如何获取以 www 开头的那些。
另外请记住,如果链接已经在 bbcode 中,则不应在此正则表达式中捕获它。
return preg_replace('/(?<!src=[\"\'])(http(s)?:\/\/(www\.)?[\/a-zA-Z0-9%\?\.\-]*)(?=$|<|\s)/','<a href="$1">$1</a>', $text);
【问题讨论】:
-
一个链接总是有一个协议前导方案。您正在尝试解释一些 可能 被解释为参考的字符串,这是一件有风险的事情。此外,只有少数 Web 服务器的主机名仍然带有 1980 年使用的传统
www.前缀...... -
支持 www 是因为当前版本的站点上的用户不会从站点复制和粘贴 URL。相反,他们知道地址并添加 www。而不是网址中的 http://。