当把一个有可选部分的字符串分割成一个或三个部分时,scala.MatchError错误。

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

我是想拿出这样的东西。

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

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

regex scala regex-group
1个回答
1
投票

我相信你想把字符串分成3个或2个部分(取决于可选的 params = \{.*}).

您可以使用

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

搜索引擎演示. 详情

  • ^ - 弦首
  • (.*?) - 第1组(左边):
  • (?:(params\s*=\s*\{.*?})(.*))? - 一个可选的非捕获组,将至少被尝试一次。
    • (params\s*=\s*\{.*?}) - 第2组(paramsStr):params 词: = 用0个以上的空格封闭。{除换行符以外的任何零或多个字符,尽量少用,然后再用 }
    • (.*) - 第3组:除换行符外的任何0个或更多的字符,尽可能多的字符
  • $ - 句号

Scala演示:

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

产出:

Left: @RequestMapping(value = "/breezeQuery", 
Param String: params = {"path", "contentName"}
Right: , method = RequestMethod.GET)
© www.soinside.com 2019 - 2024. All rights reserved.