Facebook 的 URL 匹配算法是如何工作的? [复制]

Posted

技术标签:

【中文标题】Facebook 的 URL 匹配算法是如何工作的? [复制]【英文标题】:How does Facebook's URL matching algorithm work? [duplicate] 【发布时间】:2013-08-19 14:05:31 【问题描述】:

你知道如果你去 facebook.com 并在状态更新文本区域中输入一个 URL,它将自动被检测到,Facebook 会显示来自该 URL/链接的数据的小快照? Facebook 甚至不在乎您输入的 URL 是否带有http:// 之类的协议。

我希望复制这种行为。现在我有这个正则表达式:

((?:https?:\/\/)?)((?:[a-zA-Z0-9\-]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]2)(?:[a-z0-9\._\/~%\-\+&\#\?!=\(\)@]*)?(?:#?(?:[w]+)?)?)

我用它来匹配在文本区域中输入的 URL。但是,它有误报;它将匹配document.write(foo),这显然不是一个URL。

Facebook 似乎没有这个问题。事实上,我可以在 Facebook 的 textarea 中输入“yahoo.com”,它会将其识别为 URL。但如果我输入“example.com”,它就不会识别它。因此,这意味着 Facebook 必须做的不仅仅是正则表达式匹配。还是我错了?

总之,我想知道 Facebook 在做什么,我想知道如何复制它。非常感谢任何想法、提示或解决方案。

感谢阅读。

【问题讨论】:

这个问题似乎跑题了,因为它是关于闭源网络服务的实现细节。 【参考方案1】:

匹配任何 url 的最简单的正则表达式是

[a-z_\.\-0-9]+\.[a-z]+

如果存在,请查找结果。如果结果失败,那么它不是一个 url。

如果一个 url 在没有 http:// 前缀的情况下呈现给您,则没有保存方法来判断它是否是一个 url。

正则表达式将匹配以下字符串中的 ***.com ;

我总是使用 ***.com 来找到我需要的答案。

如果您尝试"http://www." & regex.match.value,您应该会得到一个有效的网址......或者不是......你不会知道,直到你进行查找。

【讨论】:

唯一的问题,以及我在帖子中介绍的正则表达式,是有误报的机会。有人可以输入“没什么。你也怎么了?”并且“much.what”将匹配为 URL。我想解决这个问题的唯一方法是检查域在服务器端是否有效。 如果不查找,就无法提前知道 url 是否为 url。即使stockoverfliw.com 可能会失败,尽管它是有效的 url 格式,但没有 webste 存在。您会得到误报,但您需要进行查找以确定。【参考方案2】:

也许在发布猜测的 url 之前,它会执行 ajax ping 或其他操作以确保候选 url 在呈现之前确实存在?

【讨论】:

【参考方案3】:

facebook 正在使用 contenteditable div 来检测链接, 在你的最后,我建议你听每一个按键,因为它有多种用途,例如按下@后你也会看到朋友列表

【讨论】:

以上是关于Facebook 的 URL 匹配算法是如何工作的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

应用程序域必须与 Facebook Web Games URL (https)、移动站点 URL、Unity 二进制 URL、站点 URL 或安全页面选项卡 URL 的域匹配

如何在 iOS 6 上将多个 URL 共享到 Facebook

匹配名称的好算法?

不是本地主机上的有效域 facebook

如何使用 facebook 应用程序让 magento 多商店工作

Azure Bot服务Facebook Messenger回调URL提供404