引用名为group的java正则表达式的多个匹配项

时间:2015-05-08 18:26:11

标签: java regex

我有一个可以出现0次或更多次的Java正则表达式组,但我不确定如果它们多次出现就会引用匹配。

简化示例:

Pattern myPattern = Pattern.compile("(?<myGroupName>foo.)*"); // notice greoup "myGroupName" can appear 0 or more times
Matcher myMatcher = myPattern.matcher("foo1foo2foo3"); // notice the named group "myGroupName" appears 3 times
myMatcher.find(); 
myMatcher.group("myGroupName"); // This will return "foo3".. foo1 and foo2 are lost

更新

感谢帮助aioobe!不幸的是,我需要通过名称引用这些匹配来区分组并适当地处理相应的数据。我通过移动组内的“*”(0或更多字符)并使用第二个正则表达式迭代匹配来解决这个问题:

        String regex = "foo.x";
    Pattern myPattern = Pattern.compile("(?<myGroupName>(" + regex + ")*)"); // notice greoup "myGroupName" can appear 0 or more times
    Pattern specPattern = Pattern.compile(regex);

    Matcher myMatcher = myPattern.matcher("foo1xfoo2xfoo3x"); // notice the named group "myGroupName" appears 3 times
    myMatcher.find();
    System.out.println(myMatcher.group("myGroupName"));
    Matcher specMatcher = specPattern.matcher(myMatcher.group("myGroupName"));

    while(specMatcher.find()){
        System.out.println(specMatcher.group());
    }

1 个答案:

答案 0 :(得分:2)

你不能。该组将包含最后一场比赛。 (这里有一组静态组,最后一场比赛会覆盖之前的任何一场比赛。)

您必须重写逻辑并使用循环重复find()下一场比赛。

相关问题(甚至可能是重复的):Regular expression with variable number of groups?