有很多解决方案可以找到和/或解析普通网址,但是它们都没有处理任意文本,即分成几行的网址?如何在任何角色后找到可以换行的URL?
注意:我对网址的各个部分不感兴趣。我只想查找给定文本中的所有URL以将它们转换为链接(例如,在普通电子邮件文本中)。
示例:
Text text text text text. Look at this:
http://stackoverfl
ow.com/
questions/15252042/
find-urls-in-text
Question question question.
答案 0 :(得分:0)
有几种方法可以:
1)在每个常规字符后面写一个带有空格规则的正则表达式。这肯定会破坏正则表达式,但却是最灵活的。要捕获换行符,请使用DOT_ALL模式。然而,DOT_ALL会产生与下一个方法相同的问题。
2)(暂时)删除换行符并使用正常的正则表达式模式匹配。这种方法存在问题,但是可能会出现包含更多文本而不是必要的文本(在URL末尾)或者找不到URL(如果换行符在开头,弄乱了协议字符串)。 / p>
2a)2)的修改可以是进行几次匹配尝试,仅删除某些换行符,例如,在寻找初始URL部分(例如www,http等)之后。只有在识别时间是次要的时候才有可能。
3)使用特定领域知识轻松完成任务。例如,如果您知道可以在哪里发生换行(或者如果它们仅出现在特定位置),那么请查找这些特定情况并首先解决它们。然后返回通常的正则表达式搜索。
3a)3)的变体可以是使用具有完整空白规则的正则表达式专门查找协议和页面扩展,以查找URL的开始和停止。这显然只有在始终是protocol / filename_with_extension时才有效。将找到的标记转换为没有空格的常规标记(但在协议之前和扩展之后包含空格),然后删除文本中的所有换行符。现在,您可以将URL与常规正则表达式匹配。
肯定会有更多变化,但总体思路是一样的。