如何使用 scala 函数将错误消息与正则表达式模式匹配

问题描述 投票:0回答:1

此函数需要获取给定的错误消息,将其与正则表达式模式匹配并返回规定的错误消息或 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")
}
regex scala function match
1个回答
0
投票

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 => ...
}
© www.soinside.com 2019 - 2024. All rights reserved.