2017-01-18 6 views
0

Scala 2.11.8でURLのホスト名を抽出しようとしています。何らかの理由でパターンマッチングアプローチが動作しないと私はScalaでなぜ:(ScalaでRegexのパターンマッチングが動作しないのはなぜですか

val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r 
val text = "https://foo-bar.hostname.com/" 

// evaluates to None 
val host: Option[String] = { 
    text match { 
    case HOSTNAME(h) => Some(h) 
    case _ => 
     None 
    } 
} 

// evaluates to Some(foo-bar.hostname.com) 
val host: Option[String] = { 
    val matcher = HOSTNAME.findAllIn(text) 
    if (matcher.hasNext && matcher.groupCount > 0) { 
    Some(matcher.group(1)) 
    } else { 
    None 
    } 
} 

答えて

4

を把握することはできません、正規表現は、は、デフォルトではを固定されている - あなたはそれが、これがうまくいく非固定にする場合:

結果は Some(foo-bar.hostname.com)(私はそれはあなたが一致しようとしているものだと仮定している)ことになる
val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r.unanchored 

代わり - 次のスラッシュの後に何もマッチする部分を追加します。

val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)\\/.*".r 

同じ結果が返されます。最後に

- あなただけの標準のURIを解析したい場合は、java.net.URIを使用することができます。

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

グレート答え、どうもありがとう! – reikje

関連する問題