我试图拉出这样的东西:
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)