我意识到这个问题已经在 Stack Overflow 和整个网络上被问过很多次了,事实上,我刚刚打开了大约 20 个选项卡,并为这个问题提供了明显的解决方案。
问题是每一个答案都说了一些类似的东西
您可以使用正则表达式,但这不是一个好主意并且不能可靠地工作,但我不会提供任何替代方案。
所以我的问题是——真的没有可靠、明确的方法可以从文本中提取 URL 吗?
我意识到这个问题已经在 Stack Overflow 和整个网络上被问过很多次了,事实上,我刚刚打开了大约 20 个选项卡,并为这个问题提供了明显的解决方案。
问题是每一个答案都说了一些类似的东西
您可以使用正则表达式,但这不是一个好主意并且不能可靠地工作,但我不会提供任何替代方案。
所以我的问题是——真的没有可靠、明确的方法可以从文本中提取 URL 吗?
正则表达式是非常强大的工具。像大多数强大的工具一样,它们被严重误解,在许多用户手中很危险,并且是某些任务的最佳答案。 匹配字符串中的已知模式就是它们存在的目的。一旦您掌握了良好的 URL 模式,它将始终在其设计的上下文中工作。每个人都回避使用它们的原因是,为特定上下文创建一个好的 URL 模式是一项艰巨的工作。该模式将因执行环境(例如,URL 的操作系统file:
)、编程语言和/或使用的库等而异。
对于 HTTP URL 的特定情况,有一个明确的定义,主要是遵守,您可以使用几乎任何语言或库从它构建一个可靠的正则表达式。
我们真的没有可靠、明确的方法可以从文本中提取 URL 吗?
好吧,字符串格式列表中的任何内容都需要仔细处理异常。也就是说,一旦您进行了处理,它应该可以正常工作。
带有 uri 模式的正则表达式可能会起到类似的作用:
<a href="(?<url>http://.*?)".*>(?<text>.+?)<\/a>
这是一个.NET 正则表达式,因此您可能需要修改它以在您的平台语言上工作。
如果你想从任何字符串中提取 URL,除了使用 Regex 之外别无选择。事实上 URI Scheme 已定义(请参阅http://en.wikipedia.org/wiki/URI_scheme),如果您了解它的所有方面,正则表达式非常可靠。