我有一个可以出现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());
}
答案 0 :(得分:2)
你不能。该组将包含最后一场比赛。 (这里有一组静态组,最后一场比赛会覆盖之前的任何一场比赛。)
您必须重写逻辑并使用循环重复find()
下一场比赛。
相关问题(甚至可能是重复的):Regular expression with variable number of groups?