php - 从字符串中提取 URL

标签 php regex url preg-replace

我正在尝试找到一个可靠的解决方案来从字符串中提取网址。我有一个网站,用户可以在其中回答问题,并在来源框中输入信息来源,我允许他们输入网址。我想提取该网址并将其设为超链接。类似于雅虎问答的做法。

有人知道可以做到这一点的可靠解决方案吗?

我发现的所有解决方案都适用于某些 URL,但不适用于其他 URL。

谢谢

最佳答案

约翰·格鲁伯有 spent a fair amount of time完善“一个正则表达式来统治所有”的链接检测。正如其他答案中提到的,使用 preg_replace() ,使用以下正则表达式应该是检测链接的最准确(如果不是最准确)的方法之一:

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

如果您只想匹配 HTTP/HTTPS:

(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

关于php - 从字符串中提取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390556/

相关文章:

regex - 如何匹配正则表达式中的所有 unicode 字母字符和空格?

javascript - contentEditable DIV 中的大量替换

python - Django 管理 URL 可见重定向

php - 为什么要同时检查 isset() 和 !empty()

php - 如何使用 jquery load() 和 zend 框架加载 html 文件?

python - 用适当的元素替换贪婪的元素

Android网络浏览器,检查url是否为文件

php - 备份问题 DirectAdmin - Centos 7

php - 使用 php 从给定的 url 下载 apk 文件到服务器

wcf - 如何使 WCF 命名管道地址等于 WinApi 管道地址?