Ich habe mit Pattern-Matching folgende regex:Scala: regex direkt in Pattern-Matching Block
val url = "/en/about"
val langRegex = "/(.{2}).*".r
val lang = url match {
case langRegex(lang) => lang
case _ => "en"
}
Aber ich möchte so etwas erreichen (ich will nicht für regex zusätzliche Variable erstellen, sondern setzen es direkt in passendem Block)
val url = "/en/about"
val lang = url match {
case "/(.{2}).*".r(lang) => lang
case _ => "en"
}
Ich erhalte Compilerfehler im zweiten Fall? Ich habe gerade langRegex (lang) mit "/(.{2}).*".r ersetzt, sollten diese Ausdrücke gleich sein, sollte es nicht?
Warum ist das ein Fehler?
Die Sache ist, dass Sie das einfach nicht tun können, Sie brauchen ein vorkompiliertes Muster. Was Sie tun können, ist entweder ein "if" innerhalb verwenden und einige String-Manipulation verwenden, wenn die Zeichenfolge Ihre Regex entspricht, oder einfach einen einfacheren Code wie in http://ideone.com/CJMS1A –
verwenden Oder verwenden Sie ['case s if url .matches ("/ (. {2}). *") => s.replaceFirst ("/(.{2}).*", "$ 1") '] (http://ideone.com/dqlW4z) . –