Scala正则表达式从网址中提取域名

时间:2015-03-26 19:59:21

标签: regex scala

我想使用Scala正则表达式从以下输入中提取bell.com。我尝试了一些变化但没有成功。

"www.bell.com"
"bell.com"
"http://www.bell.com"
"https://www.bell.com"
"https://bell.com/about"
"https://www.bell.com?token=123"

这是我的代码,但没有用。

val pattern = """(?:([http|https]://)?)(?:(www\.)?)([A-Za-z0-9._%+-]+)[/]?(?:.*)""".r
url match {
  case pattern(domain) =>
    print(domain)
  case _ => print("not found!")
}

编辑: 我的正则表达式错了。感谢@Tabo。这是正确的。

(?:https?://)?(?:www\.)?([A-Za-z0-9._%+-]+)/?.*

3 个答案:

答案 0 :(得分:5)

您可以尝试:

import java.net.URL
import util.Try

val t = "https://www.bell.com?token=123"

val url = Try { new URL(t) }.toOption

答案 1 :(得分:3)

您可以使用Java URL类获取Host,也可以检查Apache库

new URL("https://www.bell.com?token=123").getHost

答案 2 :(得分:0)

你应该使用java.net.URL方法,但是......

为了将来参考,您的正则表达式中有几个问题。方括号与字符集匹配,因此[http|https][htps|]相同(意思是' h',' t',' p',& #39; s'或' |')。我认为您的意思是http|https或只是https?

此外,如果您只是尝试匹配只是域,则您只想拥有一个捕获组。请注意,(?:blah)表示非捕获组,而(blah)表示捕获组。正则表达式中的三个捕获组是([http|https]://)(www\.)?([A-Za-z0-9._%+-]+)。你真的只想要最后一个。

尝试:

(?:https?://)?(?:www\.)?([A-Za-z0-9._%+-]+)/?.*

在此测试 - https://regex101.com/r/xW4iY7/2