我是想拿出这样的东西。
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 = \{.*}
).
您可以使用
^(.*?)(?:(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)