/ / Come eseguire la corrispondenza del modello su regex in una funzione foreach in scala? - regex, scala

Come fare la corrispondenza del modello su regex in una funzione foreach in scala? - regex, scala

Non capisco perché questo non funziona (ho due "nessuna corrispondenza" qui):

val a = "aaa".r
val b = "bbb".r

List("aaa", "bbb").foreach {
case a(t) => println(t)
case b(t) => println(t)
case _ => println("no match")
}

risposte:

4 per risposta № 1

La variabile tra parentesi dovrebbe catturare il gruppo. Cambia la tua regex in val a = "(aaa)".r; val b = "(bbb)".r, che "farò fare quello che vuoi". In alternativa, modifica i modelli di corrispondenza:

List("aaa", "bbb").foreach {
case a() => println("aaa")
case b() => println("bbb")
case _ => println("no match")
}

1 per risposta № 2

Il pattern non contiene alcun gruppo di cattura, è necessario inserire le parentesi attorno al pattern che si desidera catturare affinché il pattern matching funzioni:

val a = "(aaa)".r
// a: scala.util.matching.Regex = (aaa)

val b = "(bbb)".r
// b: scala.util.matching.Regex = (bbb)

List("aaa", "bbb").foreach {
case b(t) => println(t)
case a(t) => println(t)
case _ => println("no match")
}

//aaa
//bbb