1

私はこの正規表現を書きました:

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

キャプチャされていない1ようです。3(出力45-7は問題ありません。) それらをキャプチャできるように正規表現を修正するにはどうすればよいですか (最後にコンマなしでキャプチャできます)。

4

1 に答える 1

2

あなたの目標が によって予測される数値を見つけることである場合、something elseまたはsomething not elseおそらくそれらを1つのグループにグループ化し、次に で分割し,\\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]
于 2012-07-19T01:02:13.187 に答える