Совпадение найдено, но как извлечь данные? - PullRequest
0 голосов
/ 10 августа 2010

У меня есть следующее регулярное выражение (abc|def)( ?(\\d+|(?:(?!\\1)[a-z])+)?)* с идеальным совпадением темы abc123 456.
Теперь я хочу получить все детали abc , 123 и 456 .

Я использую следующий код:

Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(subject);

while(m.find())
{
    System.out.println(m.group());
}

Но так я получаю только abc123 456.

Любые идеи приветствуются.

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Вы должны получить каждую группу отдельно вместо m.group(). javadoc утверждает, что m.group() эквивалентно m.group(0), и отдельные группы могут быть доступны с версией m.group(int).Поэтому следующие утверждения должны отражать группировку так, как вы ожидаете.

Assert.assertEquals("abc", m.group(1));
Assert.assertEquals("123", m.group(2));
Assert.assertEquals("456", m.group(3));
0 голосов
/ 25 августа 2010

Я использовал решение, описанное в моем комментарии выше:

Да, это работает, но я заметил, что могу упростить регулярное выражение.abc | def - это команды, а затем параметры разделяются пробелом.И я ищу способ получить их.Но я думаю, что легче отрезать команду и разделить ее пробелами, не так ли?

...