如何在文本中捕获用户给出的URL

时间:2011-01-28 12:14:12

标签: java regex url

我想在用户的文本中获取用户提供的URL(我假设URL必须以http://开头)。这是第一次尝试:

Pattern pattern = Pattern.compile("http://[^ ]+");

但如果用户输入类似的内容:

"look at somepage (http://somepage.net)"
"look at http://somepage1.net, http://somepage2.net and sth else"
"Please visit our page http://somepage.net."

网址末尾的(?)字符不正确。怎么避免这个?

2 个答案:

答案 0 :(得分:0)

数学,什么网址不能以[,。)等结尾,只能结束[A-Za-z]或/,但这会打破网址的特定结尾,例如http://site.com/read.php?key=F# $。)< / p>

答案 1 :(得分:0)

答案是你不能100%准确地做到这一点。

"http://somepage1.net,"这样的网址在技术上是合法的,并且无法确定","是否是网址的一部分或只是标点符号。

"http://somepage1.net or something"这样的网址在技术上是非法的,但典型的最终用户并不知道这一点。 (他们习惯于在浏览器中输入各种各样的时髦东西的浏览器。)

或许,您可以做的最好的事情就是使用正则表达式来提取合法网址,然后在假设的网页右端修剪文字标点字符,它们并不打算成为URL的一部分。

您还可以将匹配引号或左/右括号视为表示URL边界; e.g。

    The secret URL is "http://example.com/?" ... don't leave off the "?"