scala match模式匹配正则 无法生效

遇到个鬼畜事件,scala的字符串模式匹配了一个正则,怎么写都不走对应的分支。脑子都成浆糊了,大家帮我看一些是我写的问题还是什么?

      schema.map(m => {
          val re = """[\u4e00-\u9fa5]+""".r()
          m.name match {
              case re(x) => "有中文"+x
          }
      }).foreach(println(_))

这部分代码本来是打算判断是否有中文,但是怎么写都不走case,本来有个case _,但暂时删掉了,现在不管怎么改都不走正则,甚至报scala.MatchError: XXX (of class java.lang.String)这种鬼畜错误,正则本身就用在字符串上,但现在因为它是String而报错。就很诡异。

这段代码中的问题在于,正则表达式匹配成功后没有返回任何值,也就是说,如果匹配成功,这个case语句块将不会有任何输出。另外,还需要将re(x)的值返回出来。

您可以尝试如下修改代码:

schema.map(m => {
    val re = """[\u4e00-\u9fa5]+""".r
    m.name match {
        case re(x) => println(s"有中文$x")
        case _ =>
    }
})

我们在匹配成功时使用println语句输出中文字符串,同时加入一个case _来覆盖所有其他情况。同时,将正则表达式的r()去掉,只保留r。