scala正则表达式的含义

scala regex meaning

我是 scala 的新手,讨厌正则表达式 :D 目前我正在调试一段代码

  def validateReslutions(reslutions: String): Unit = {
    val regex = "(\d+-\d+[d,w,m,h,y],?)*"
    if (!reslutions.matches(regex)) {
      throw new Error("no match")
    } else {
      print("matched")
    }
  }
  validateReslutions(reslutions = "(20-1w,100-1w)")
}

问题是它没有为这个输入生成匹配项,那么如何更正正则表达式以匹配这个输入

您的 (20-1w,100-1w) 字符串在开头和结尾包含一对括号,其余部分与您的 (\d+-\d+[d,w,m,h,y],?)* 正则表达式匹配。由于 String#matches 需要完整的字符串匹配,因此出现异常。

在正则表达式中包含括号模式以避免异常:

def validateReslutions(reslutions: String): Unit = {
    val regex = """\((\d+-\d+[dwmhy],?)*\)"""
    if (!reslutions.matches(regex)) {
        throw new Error("no match")
    } else {
        print("matched")
    }
}
validateReslutions(reslutions = "(20-1w,100-1w)")
// => matched

参见Scala demo

注意用于定义字符串文字的三重引号,您可以在其中使用单个反斜杠来定义文字反斜杠字符。

此外,请注意字符 class 中没有逗号,它们匹配文本中的文字逗号,它们并不表示字符 class 中的“或”。