Группа X
из этой части вашего регулярного выражения:
(\\s+(\\d+))+
| |
+----------+--> X
сначала будет соответствовать 12
, затем 32
и, наконец, 42
. Каждый раз значение X
изменяется и заменяет предыдущее. Если вы хотите все значения, вам потребуется подход Pattern
& Matcher.find()
:
String s = "SUM 12 32 42 PROD 1 2";
Matcher m = Pattern.compile("(PROD|SUM)((\\s+\\d+)+)").matcher(s);
while(m.find()) {
System.out.println("Matched : " + m.group(1));
Matcher values = Pattern.compile("\\d+").matcher(m.group(2));
while(values.find()) {
System.out.println(" : " + values.group());
}
}
который напечатает:
Matched : SUM
: 12
: 32
: 42
Matched : PROD
: 1
: 2
И вы видите напечатанный null
, потому что в группе 1 есть PROD
, который вам не соответствует.