【问题标题】:How to find arbitrary URLs in plain text?如何以纯文本查找任意 URL?
【发布时间】:2013-02-21 12:30:22
【问题描述】:

找到和/或解析普通 URL 的解决方案有很多,但没有一个能处理任意文本,即分成几行的 URL?您如何找到可以在任何字符后有换行符的 URL?

注意:我对 URL 的各个部分不感兴趣。我只想找到给定文本中的所有 URL 以将它们转换为链接(例如,就像在纯电子邮件文本中一样)。

例子:

Text text text text text. Look at this:
http://stackoverfl
ow.com/
questions/15252042/
find-urls-in-text

Question question question.

【问题讨论】:

  • 是的,请举例说明你在说什么
  • 您问“如何找到可以在任何字符后有换行符的 URL?”而且我认为您没有任何可靠的方法可以做到这一点。有时垃圾数据就是垃圾数据,你不能用它做任何事情。
  • 电子邮件程序如何找到纯文本的 URL?拜托,这不是火箭科学。
  • 他们会忽略这样的链接

标签: regex url text hyperlink text-parsing


【解决方案1】:

有几种可能的方法:

1) 在每个常规字符后编写一个带有空格规则的正则表达式。这肯定会破坏正则表达式模式,但却是最灵活的模式。要捕获换行符,请使用 DOT_ALL 模式。然而,DOT_ALL 会产生与下一种方法相同的问题。

2) (临时)删除换行符并使用正常的正则表达式模式匹配。这种方法存在一些问题,因为它可能会包含比必要的文本更多的文本(在 URL 的末尾)或找不到 URL(如果换行符在开头,则会弄乱协议字符串)。

2a) 对 2) 的修改可能是进行多次匹配尝试,仅删除某些换行符,例如在寻找初始 URL 部分(例如 www、http 等)之后。只有在识别时间是次要的情况下才有可能。

3) 使用特定领域的知识简化您的任务。例如,如果您知道换行可能发生的位置(或者它们仅发生在特定位置),那么请查找这些特定情况并首先解决它们。然后返回到通常的正则表达式搜索。

3a) 3) 的变体可能是使用带有完整空格规则的正则表达式专门查找协议和页面扩展,以查找 URL 的开始和停止。这显然只有在始终存在协议/文件名_with_extension 时才有效。将找到的标记转换为没有空格的常规标记(但在协议之前和扩展之后包含一个空格),然后删除文本中的所有换行符。现在您可以将 URL 与常规正则表达式匹配。

当然还有更多可能的变化,但总体思路是一样的。

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2010-09-25
    • 2011-03-22
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多