scala.MatchError 将带有可选部分的字符串分成一个或三个部分时
scala.MatchError when partitioning a string with an optional part into one or three parts
我正在尝试拉出这样的东西:
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*\{.*?})(.*))?$
见regex demo。 详情
^
- 字符串开头
(.*?)
- 第 1 组(左):
(?:(params\s*=\s*\{.*?})(.*))?
- 可选的非捕获组,将至少尝试一次:
(params\s*=\s*\{.*?})
- 第 2 组(paramsStr):params
字,=
包含 0+ 个空格,{
,除换行符以外的任何零个或多个字符,尽可能少,然后 }
(.*)
- 第 3 组:除换行字符外的任何零个或多个字符,尽可能多
$
- 字符串结尾
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)
我正在尝试拉出这样的东西:
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*\{.*?})(.*))?$
见regex demo。 详情
^
- 字符串开头(.*?)
- 第 1 组(左):(?:(params\s*=\s*\{.*?})(.*))?
- 可选的非捕获组,将至少尝试一次:(params\s*=\s*\{.*?})
- 第 2 组(paramsStr):params
字,=
包含 0+ 个空格,{
,除换行符以外的任何零个或多个字符,尽可能少,然后}
(.*)
- 第 3 组:除换行字符外的任何零个或多个字符,尽可能多
$
- 字符串结尾
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)