Java Regex查找具有跳过模式组的所有匹配项

时间:2017-03-30 08:29:20

标签: java regex

我有这个代码可以找到所有匹配项:

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组

0 个答案:

没有答案