【问题标题】:PHP regex to find linksPHP正则表达式查找链接
【发布时间】: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://。

标签: php regex


【解决方案1】:

我可以建议尝试一下吗:

(?<!src=[\"\'])((http(s)?:\/\/(www\.)?|(www\.))[\/a-zA-Z0-9%\?\.\-]*)(?=$|<|\s)

我相信这应该会捕获 http(s) 和 www。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2019-04-25
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多