斯卡拉.将包含可选部分的字符串分区为一个或三个部分时出现 MatchError



我试图拉出这样的东西:

params = {"path", "contentName"}

以下部分parametersStr

@RequestMapping(value = "/breezeQuery", params = {"path", "contentName"}, method = RequestMethod.GET)

为什么这段代码给了我一个scala.MatchError

val paramsPattern = """(.*)(?:params = {.*})?(.*)""".r
val paramsPattern(left, paramsStr, right) = parametersStr

此外,这样的模式可能不会出现在字符串中。 所以我也想知道情况是否如此。 最后,我将捕获组左侧和右侧的所有内容,以便我可以连接它们以从字符串中删除捕获的组。 它是可选的,但如果它存在,我确实想捕获它。

我相信您想将字符串分成 3 或 2 个部分(取决于可选的params = {.*}(。

您可以使用

^(.*?)(?:(paramss*=s*{.*?})(.*))?$

请参阅正则表达式演示。

  • ^- 字符串的开头
  • (.*?)- 第 1 组((:
  • (?:(paramss*=s*{.*?})(.*))?- 可选的非捕获组,将至少尝试一次:
    • (paramss*=s*{.*?})- 组 2 (paramsStr(:params单词,=用 0+ 空格括起来,{、除换行符字符以外的任何零个或多个字符,尽可能,然后}
    • (.*)- 第 3 组:除换行符字符以外的任何零个或多个字符,尽可能多
  • $- 字符串结尾

参见 Scala 演示:

val parametersStr = """@RequestMapping(value = "/breezeQuery", params = {"path", "contentName"}, method = RequestMethod.GET)"""
val paramsPattern = """^(.*?)(?:(paramss*=s*{.*?})(.*))?$""".r
val paramsPattern(left, paramsStr, right) = parametersStr
println(s"Left: $leftnParam String: $paramsStrnRight: $right")

输出:

Left: @RequestMapping(value = "/breezeQuery", 
Param String: params = {"path", "contentName"}
Right: , method = RequestMethod.GET)

相关内容

最新更新