使用正则表达式从文本中提取带有和不带有自定义 URL 方案的 URL
Extract URL with and without custom URL schemes from text using RegEx
我正在寻找一种使用 RegEx 从文本中提取 URLs 的方法。 SF 上有很多问题和非常好的答案,但我没有找到能够提取 URLs 以及自定义方案的 RegEx 解决方案。
这里有几个例子,我需要从中提取 URLs:
Text: Send me a message on whatsapp whatsapp://send?text=Hello+World. I will get in touch!
-> Should extract whatsapp://send?text=Hello+World
Text: Some text google.com
-> Should extract google.com
Text: There are many nice people on https://www.whosebug.com
-> Should extract https://www.whosebug.com
Text: You can send visit my Facebook profile on fb://myhappyprofile.
-> Should extract fb://myhappyprofile
Text: https://www.google.com
-> Should extract https://www.google.com
目前我发现的解决方案明确提取了 URLs 以 http:// https:// 或://。在这些解决方案中,必须在表达式中指定协议。
我得到最多结果的表达式是以下表达式:
(http|ftp|https|whatsapp|fb):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?
我在这里列出了 URL 方案 ("deep links") 到 WhatsApp 和 Facebook 等应用程序。
不幸的是,这并不能很好地扩展。
如有任何帮助,我们将不胜感激!
如果我没看错的话,你想要的是有一种通用的方法来检测用于 URL 的协议,这样你就不需要维护一个包含 100 个不同协议的列表?
如果是这样,那么用标准字符捕获替换您的协议列表应该可以完成工作。
假设:
- URLs 将始终包含“://”以将协议与位置分开
- 协议最少包含 2 个字符,最多包含 20 个字符(但您可以根据自己的要求进行调整
这意味着以下内容应该可以完成工作
([a-zA-Z]{2,20}):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?
我正在寻找一种使用 RegEx 从文本中提取 URLs 的方法。 SF 上有很多问题和非常好的答案,但我没有找到能够提取 URLs 以及自定义方案的 RegEx 解决方案。
这里有几个例子,我需要从中提取 URLs:
Text: Send me a message on whatsapp whatsapp://send?text=Hello+World. I will get in touch!
-> Should extract whatsapp://send?text=Hello+World
Text: Some text google.com
-> Should extract google.com
Text: There are many nice people on https://www.whosebug.com
-> Should extract https://www.whosebug.com
Text: You can send visit my Facebook profile on fb://myhappyprofile.
-> Should extract fb://myhappyprofile
Text: https://www.google.com
-> Should extract https://www.google.com
目前我发现的解决方案明确提取了 URLs 以 http:// https:// 或://。在这些解决方案中,必须在表达式中指定协议。
我得到最多结果的表达式是以下表达式:
(http|ftp|https|whatsapp|fb):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?
我在这里列出了 URL 方案 ("deep links") 到 WhatsApp 和 Facebook 等应用程序。 不幸的是,这并不能很好地扩展。
如有任何帮助,我们将不胜感激!
如果我没看错的话,你想要的是有一种通用的方法来检测用于 URL 的协议,这样你就不需要维护一个包含 100 个不同协议的列表?
如果是这样,那么用标准字符捕获替换您的协议列表应该可以完成工作。
假设:
- URLs 将始终包含“://”以将协议与位置分开
- 协议最少包含 2 个字符,最多包含 20 个字符(但您可以根据自己的要求进行调整
这意味着以下内容应该可以完成工作
([a-zA-Z]{2,20}):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?