/ / Comment faire la recherche de motif sur une regex dans une fonction foreach dans scala? - regex, scala

Comment faire une recherche de motif sur une expression rationnelle dans une fonction foreach dans scala? - regex, scala

Je ne comprends pas pourquoi cela ne marche pas (j’ai deux "pas de match" ici):

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")
}

Réponses:

4 pour la réponse № 1

La variable entre parenthèses est supposée capturer le groupe. Changez vos regexes en val a = "(aaa)".r; val b = "(bbb)".r, ça le fera faire ce que vous voulez. Sinon, modifiez les modèles de correspondance:

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

1 pour la réponse № 2

Votre modèle ne contient aucun groupe de capture, vous devez placer des parenthèses autour du modèle que vous souhaitez capturer pour que le modèle corresponde:

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