9

私は次のようなことをしようとしています:

list.foreach {x => 
     x match {
       case """TEST: .*""" => println( "TEST" )
       case """OXF.*"""   => println("XXX")
       case _             => println("NO MATCHING")
     }
}

アイデアは、Groovy スイッチ ケース正規表現一致のように使用することです。しかし、私はコンパイルすることができないようです。scalaでそれを行う正しい方法は何ですか?

4

2 に答える 2

24

コンパイル済みの正規表現で照合するか (以下の最初のケースのように)、if 句を追加することができます。case通常、各評価で同じ正規表現を再コンパイルするのではなく、オブジェクトで使用することに注意してください。

val list = List("Not a match", "TEST: yes", "OXFORD")
   val testRegex = """TEST: .*""".r
   list.foreach { x =>
     x match {
       case testRegex() => println( "TEST" )
       case s if s.matches("""OXF.*""") => println("XXX")
       case _ => println("NO MATCHING")
     }
   }

詳細についてはこちらを、背景情報はこちらをご覧ください。

于 2013-03-29T03:17:41.363 に答える
11

を開始すると、文字列インターポレータの適用を解除するScala 2.13ことで、 a を直接パターン マッチすることができます。String

// val examples = List("Not a match", "TEST: yes", "OXFORD")
examples.map {
  case s"TEST: $x" => x
  case s"OXF$x"    => x
  case _           => ""
}
// List[String] = List("", "yes", "ORD")
于 2019-06-26T21:10:01.627 に答える