如何捕获所有嵌套匹配?

时间:2015-05-20 19:17:32

标签: java regex

我最近试图回答一个问题,在尝试解决问题时,我遇到了一个问题。

给出以下代码

private void regexample(){
    String x = "a3ab4b5";

    Pattern p = Pattern.compile("(\\D+(\\d+)\\D+){2}");
    Matcher m = p.matcher(x);
    while(m.find()){
        for(int i=0;i<=m.groupCount();i++){
            System.out.println("Group " + i + " = " + m.group(i));
        }
    }
}

输出

Group 0 = a3ab4b
Group 1 = b4b
Group 2 = 4

我是否有任何直截了当的方式来获取值3?该模式应该查找两次(\\D+(\\d+)\\D+)背靠背,a3a是匹配的一部分。我意识到我可以将表达式更改为(\\D+(\\d+)\\D+),然后查找所有匹配项,但这在技术上并不相同。是进行双重搜索的唯一方法吗?即:使用给定的模式匹配字符串,然后再次搜索外部组的每个计数?

我猜测第一个值被第二个值覆盖了,但由于我对正则表达式并不那么好,所以我希望有一些我不知道的东西。

1 个答案:

答案 0 :(得分:3)

不可能捕获同一组的多次出现(使用标准正则表达式引擎)。你可以使用这样的东西:

Properties props = new Properties()
props.setProperty("user","neo4j");
props.setProperty("password","secret");

Connection con = DriverManager.getConnection("jdbc:neo4j://localhost:7474/",props);

现在,有四个组而不是两个组,因此您将获得预期的值。

not functional处理类似的问题。