0

正規表現のパターン マッチングを使用して抽出しようとして間違っていることを教えてください。次のコードがあります

val Pattern = "=".r
val Pattern(key, value) = "key=value"

そして、実行時に次の例外が発生します

Exception in thread "main" scala.MatchError: key=value (of class java.lang.String)
4

1 に答える 1

5

それは正規表現の問題です。正規表現はグループをキャプチャせず、単一の=文字に一致するだけです。

val Pattern = "([^=]*)=(.*)".r

あなたが得るでしょう:

scala> val Pattern(key, value) = "key=value"
key: String = key
value: String = value

編集

また、入力文字列が空の場合は一致しません。パターンを変更して一致させるか、(より良い) 次のように正規表現とパターン一致させることができます。

"key=value" match {
   case Pattern(k, v) => // do something 
   case _ => // wrong input, do nothing
}

あなたが実際に望んでいたのは、入力テキストを正規表現が一致するもので分割することだった場合、それは以下を使用して可能Regex.splitです:

scala> val Pattern = "=".r
Pattern: scala.util.matching.Regex = =

scala> val Array(key, value) = Pattern.split("key=value")
key: String = key
value: String = value
于 2013-05-03T08:53:47.070 に答える