Scala正则表达式匹配奇怪的行为

时间:2013-11-01 12:11:04

标签: regex scala

有人可以解释下面打印5 matches

的原因
object RegExer extends App {
val PATTERN = """([5])""".r

print("5" match {
case PATTERN(string) => string + " matches!"
case _ => "No Match!"
})    
}

并打印No Match!

object RegExer extends App {
val PATTERN = """[5]""".r

print("5" match {
case PATTERN(string) => string + " matches!"
case _ => "No Match!"
})    
}

为什么没有括号,范围行为不起作用?

2 个答案:

答案 0 :(得分:0)

在第二种情况下,您不定义匹配组。这就是在正则表达式匹配中用于括号的内容:它们定义了应该捕获的内容(在这种情况下,稍后表示为变量)。

答案 1 :(得分:0)

您明确要求模式返回单个组:PATTERN(string)

string这里是组(正则表达式中的parentheseis)。

您应该将PATTERN()用于没有群组的模式:

"5" match {
  case string @ PATTERN() => string + " matches!"
  case _ => "No Match!"
}
// String = 5 matches!