-2

有很多解决方案可以查找和/或解析普通 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.
4

1 回答 1

0

几种方法是可能的:

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

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

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

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

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

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

于 2013-03-09T10:33:06.117 回答