Clojure Regex:给定一个字符串,如何在该字符串中返回有效的URL?

时间:2015-03-30 22:29:22

标签: regex clojure jvm clojurescript

我试图在Clojurescript的字符串中返回有效的URL(作为子字符串),我可以使用什么正则表达式?

(re-find #"regex for valid URL" "You can visit www.google.com")
=> "www.google.com"
(re-find #"regex for valid URL" "<b>www.google.com</b>")
=> "www.google.com"
(re-find #"regex for valid URL" "<b>www.google.com</b> and www.yahoo.com")
=> "www.google.com, www.yahoo.com"

1 个答案:

答案 0 :(得分:0)

根据您希望脚本验证URL的小心程度,您提供的正则表达式,只要您摆脱'^'和'$'锚点,就可以很好地工作(as seen here)。< / p>

请注意,为了便于阅读,我在正则表达式中添加了一些空格。

我从正则表达式中看到了几个问题(正如您可能在该页面上看到的那样)。它匹配不应该的位置(例如重复的..字符),而.co.uk的网站与.co部分以及域名和.uk分别匹配。这本身就可以很容易地解决,只需将这些边缘情况直接添加到第二组((com|org|...))。

你需要删除'^'和'$'锚点的原因是,只有当URL是该行的唯一内容时,该模式才会匹配:^必须在开头时匹配该行,$只能在最后匹配。拥有<b>www.google.com</b>意味着<b>会使^锚点无法与网址匹配,因为它不会从该行的开头开始。

其他建议,例如@ amalloy的链接,提供了一个更全面的解决方案,并且会正确匹配所有内容,但它非常复杂。

因此,确切地知道您想要匹配的内容,以及您愿意忽略/交易/放弃的内容,将有助于制作适合您的内容。