捕获Java正则表达式中的组

时间:2012-07-19 00:35:29

标签: java regex

我写了这个正则表达式:

String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((\\d+|\\d+-\\d+),\\s+)*(\\d+|\\d+-\\d+)$";

这是我的主要方法:

  public static void main(String... args) {
    Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7");
    if (matcher.matches()) {
      for (int index = 0; index <= matcher.groupCount(); index++) {
        System.out.println(index + ": " + matcher.group(index));
      }
    }
  }

这是我的输出:

0:  match cos 1, 3, 4, 5-7
1: null
2: 4, 
3: 4
4: 5-7

似乎没有捕获13。 (输出45-7很好。)如何修复我的正则表达式以便我可以捕获它们(并在最后没有逗号的情况下捕获它们)?

1 个答案:

答案 0 :(得分:2)

如果您的目标是查找由something elsesomething not else预测的数字,则可以将它们分组到一个组中,然后使用,\\s+进行拆分,例如

String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((((\\d+|\\d+-\\d+),\\s+)*)(\\d+|\\d+-\\d+))$";
Pattern PATTERN = Pattern.compile(REGEX);
Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7");
if (matcher.matches()) {
    System.out
            .println(Arrays.toString(matcher.group(2).split(",\\s+")));
}

输出:

[1, 3, 4, 5-7]