为什么正则表达式模式匹配有时在Scala中不起作用
我试图在Scala 2.11.8中提取url的主机名。出于某种原因,模式匹配方法不起作用,我无法找出原因:(为什么正则表达式模式匹配有时在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中,正则表达式在默认情况下是锚定的-如果将其设置为非锚定,则可以:
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