如何在scala中的foreach函数中对正则表达式进行模式匹配?

时间:2016-12-31 14:59:28

标签: regex scala

我不明白为什么这不起作用(我这里有两个“不匹配”):

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

2 个答案:

答案 0 :(得分:4)

括号中的变量应该是捕获组。 将您的正则表达式更改为val a = "(aaa)".r; val b = "(bbb)".r,即可使其按照您的要求执行操作。 或者,更改匹配模式:

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

答案 1 :(得分:1)

您的模式不包含捕获组,您需要在要捕获的模式周围放置括号,以便模式匹配起作用:

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