为什么正则表达式模式匹配有时在Scala中不起作用

为什么正则表达式模式匹配有时在Scala中不起作用,scala,Scala,我试图在Scala 2.11.8中提取url的主机名。出于某种原因,模式匹配方法不起作用,我无法找出原因:( 在Scala中,正则表达式在默认情况下是锚定的-如果将其设置为非锚定,则可以: val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r.unanchored 结果将是Some(foo-bar.hostname.com)(我假设这就是您试图匹配的内容) 或者-添加与下一个斜杠后的任何内容匹配的零件: val HOSTNAME = "^http[

我试图在Scala 2.11.8中提取url的主机名。出于某种原因,模式匹配方法不起作用,我无法找出原因:(


在Scala中,正则表达式在默认情况下是锚定的-如果将其设置为非锚定,则可以:

val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r.unanchored
结果将是
Some(foo-bar.hostname.com)
(我假设这就是您试图匹配的内容)

或者-添加与下一个斜杠后的任何内容匹配的零件:

val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)\\/.*".r
将返回相同的结果

最后—如果您只想解析标准URI,可以使用
java.net.URI

URI.create(text).getHost // returns foo-bar.hostname.com

在Scala中,正则表达式在默认情况下是锚定的-如果将其设置为非锚定,则可以:

val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r.unanchored
结果将是
Some(foo-bar.hostname.com)
(我假设这就是您试图匹配的内容)

或者-添加与下一个斜杠后的任何内容匹配的零件:

val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)\\/.*".r
将返回相同的结果

最后—如果您只想解析标准URI,可以使用
java.net.URI

URI.create(text).getHost // returns foo-bar.hostname.com