【发布时间】:2013-01-21 09:13:58
【问题描述】:
我有以下正则表达式模式:^(\d+)(;(\d+))*$。我想获取该正则表达式中的组数以及每个组的值。
我尝试使用 groupCount 和 group 但得到以下结果:
Input: "1"
Groups: 3
"1", "1", null, null
Input: "1;2"
Groups: 3
"1;2", "1", ";2", "2"
Input: "1;2;3"
Groups: 3
"1;2;3", "1", ";3", "3"
Input: "1;2;3;4"
Groups: 3
"1;2;3;4", "1", ";4", "4"
我期待第一个 "1" 从 groupCount 获得 1。对于最后一个 "1;2;3;4",我希望从 groupCount 中得到 7。
Matcher 上是否有任何方法可以返回我所期望的?
编辑:添加生成上述输出的代码
String input = "1";
Pattern pattern = Pattern.compile("^(\\d+)(;(\\d+))*$");
for (int i = 2; i < 6; ++i) {
Matcher matcher = pattern.matcher(input);
matcher.matches();
System.out.println("Input: \"" + input + "\"\nGroups: " + matcher.groupCount());
for (int group = 0; group <= matcher.groupCount(); ++group) {
System.out.print("\"" + matcher.group(group) + "\", ");
}
System.out.println();
input += ";" + i;
}
【问题讨论】:
-
我们可以看看你的代码吗?
-
我添加了用于测试 groupCount() 和 group() 行为的代码,因为我注意到它没有达到我的预期。