exp*_*ert 0 regex scala pattern-matching scala-2.10
你能告诉我,我正在做错误的尝试使用正则表达式模式匹配吗?我有以下代码
val Pattern = "=".r
val Pattern(key, value) = "key=value"
Run Code Online (Sandbox Code Playgroud)
我在运行时得到以下异常
Exception in thread "main" scala.MatchError: key=value (of class java.lang.String)
Run Code Online (Sandbox Code Playgroud)
这更像是一个正则表达式问题:你的正则表达式不捕获任何组,它只匹配一个单个=字符.
同
val Pattern = "([^=]*)=(.*)".r
Run Code Online (Sandbox Code Playgroud)
你会得到:
scala> val Pattern(key, value) = "key=value"
key: String = key
value: String = value
Run Code Online (Sandbox Code Playgroud)
编辑:
此外,如果输入字符串为空,则不匹配.您可以更改模式以使其匹配,或者(更好)您可以与正则表达式进行模式匹配,如下所示:
"key=value" match {
case Pattern(k, v) => // do something
case _ => // wrong input, do nothing
}
Run Code Online (Sandbox Code Playgroud)
如果您真正想要的是将输入文本与正则表达式匹配的任何内容分开,那么也可以使用Regex.split:
scala> val Pattern = "=".r
Pattern: scala.util.matching.Regex = =
scala> val Array(key, value) = Pattern.split("key=value")
key: String = key
value: String = value
Run Code Online (Sandbox Code Playgroud)