我正在尝试找到一个可靠的解决方案来从字符串中提取网址。我有一个网站,用户可以在其中回答问题,并在来源框中输入信息来源,我允许他们输入网址。我想提取该网址并将其设为超链接。类似于雅虎问答的做法。
有人知道可以做到这一点的可靠解决方案吗?
我发现的所有解决方案都适用于某些 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/