几种方法是可能的:
1)在每个常规字符之后编写一个带有空格规则的正则表达式。这肯定会破坏正则表达式模式,但却是最灵活的模式。要捕获换行符,请使用 DOT_ALL 模式。然而,DOT_ALL 将产生与下一种方法相同的问题。
2)(暂时)删除换行符并使用正常的正则表达式模式匹配。这种方法有问题,因为它可能会包含比必要的文本更多的文本(在 URL 的末尾)或找不到 URL(如果换行符在开头,则会弄乱协议字符串)。
2a) 对 2) 的修改可以是进行几次匹配尝试,仅删除某些换行符,例如在查找初始 URL 部分(例如 www、http 等)之后。只有在识别时间是次要的情况下才有可能。
3) 使用特定领域的知识简化您的任务。例如,如果您知道换行符可能发生的位置(或者它们仅发生在特定位置),那么请查找这些特定情况并首先解决它们。然后返回到通常的正则表达式搜索。
3a) 3) 的变体可能是使用具有完整空格规则的正则表达式专门查找协议和页面扩展,以查找 URL 的开始和停止。这显然只有在始终存在协议/文件名_with_extension 时才有效。将找到的标记转换为没有空格的常规标记(但在协议之前和扩展之后包含一个空格),然后删除文本中的所有换行符。现在您可以将 URL 与常规正则表达式匹配。
当然还有更多可能的变化,但总体思路是相同的。