此函数需要获取给定的错误消息,将其与正则表达式模式匹配并返回规定的错误消息或 None
我构建了以下函数,其中预设了正则表达式值并且错误消息 = exMess 我知道如果我使用 exReg.findFirstIn(exMess) 则正则表达式模式匹配,但否则匹配语句仅返回 None 并且不返回任何匹配的错误消息
Intellij 没有显示任何错误来解释问题所在
我需要如何处理 Match 语句,以便它可以获取错误消息,将其与特定的正则表达式模式匹配并返回字符串或 None
where exMess = "parseR.TokenException: at line 1"
def exceptionBasicRow(exMess: String): Option[String] = {
val exReg: Regex = ("parser[R,I,N].TokenException: at line 1").r
val exReg2: Regex = ("parser[R,I,N].ParseException: at line 1").r
val exReg3: Regex = ("parser[R,I,N].ParseException: at line 1").r
val error: Option[String] = exMess match {
case exReg(_) =>
Option(
"There is a exReg error")
case exReg2(_) =>
Option(
"There is a exReg2 error")
case exReg3(_) =>
Option(
"There is a exReg3 error")
case _ => None
}
error
}
我还尝试了以下语法,但 findFirstIn 似乎无法从 Match 语句内部访问(红色)
exMess match{
case exReg.findFirstIn(exMess) => print("Error Message")
}
case rex(x) => ...
匹配并提取捕获组。
例如:
val rex = "foo(..).".r
val foo = "foobar"
foo match {
case rex(x) => println(x)
}
将打印“ba”...但是
val rex = "foo...r".r
foo match {
case rex(_) => println("yeah")
case _ => println("nah")
}
将打印
nah
,因为正则表达式没有捕获组,而匹配需要一个捕获组。
您的
case exReg(_) =>
因同样的原因而不起作用:您正在请求一个捕获组,但您的正则表达式没有它。
尝试删除
_
:只需 case exReg() => ...
就可以了。
或者,将整个内容放在括号中:
val exReg = "(parser[R,I,N].TokenException: at line 1)".r
将使您的语法与 _
一起工作(我不确定您的代码片段中的括号是否旨在执行此操作,它们需要位于引号内,您拥有它们的方式,它们只是多余并且不执行任何操作) .
最后,如果你想使用
firstMatchIn
,你需要将它用作守卫:
exMess match {
case x if exReg.firstMatchIn(x).nonEmpty => ...
}