我有这个代码可以找到所有匹配项:
String pattern = "(?<controller>[a-z\\-]+)?(?<method>(/)?[a-z\\-]+)?";
String url = "string";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(url);
while (m.find()) {
System.out.println("controller: " + m.group("controller"));
System.out.println("method: " + m.group("method")+"\n");
}
这就是我得到的:
controller: string
method: null
controller: null
method: null
这就是我想要的:
controller: string
method: null
controller: null
method: string
据我所知,只要正则表达式检测到匹配就会停止,这就是为什么第二组不匹配的原因,即使它可能匹配。
有人知道如何实现这个目标吗?
也许我可以以某种方式让匹配器在第二次迭代中跳过第一组。
基本示例:
当我在模式中有两个可选组时,它们都匹配如下字符串:
(\\w+)?(\\w+)?
我可以以某种方式迭代地将它与一个看起来像这样的字符串匹配:
someValue
因此,在第一次迭代中,它将匹配组号1 在第二次迭代中,它将匹配第2组