2015-10-23 1 views
1
Text = "AAA1.0BBB2.2CCC33.3" 
R.Expression = ([A-Z]{3}[0-9]*\.[0-9]*)* 

Ожидаемый результатПолучение всех значений группы java.util.regex.Matcher, когда звезда подстановочные присутствует

AAA1.0<br> 
BBB2.2<br> 
CCC33.3<br> 

Matcher.group(0) возвращает только CCC33.3.

Есть ли способ, что я могу получить мой ожидаемый результат.

Благодаря

ответ

0

Да, просто позвоните matcher.find() в то время как блок и удалить первую группу:

String Text = "AAA1.0BBB2.2CCC33.3"; 
Pattern pattern = Pattern.compile("[A-Z]{3}[0-9]*\\.[0-9]*"); 
Matcher matcher = pattern.matcher(Text); 
while (matcher.find()){ 
    System.out.println(matcher.group(0)); 
} 

См IDEONE demo

Обратите внимание, что символ период должен быть двойным экранированием лечиться как буквальный период.

Проблема с группой захвата вокруг всего шаблона заключается в том, что захваченные тексты хранятся в 1 буфере, который переписывается каждый раз при захвате текста. Таким образом, вы получаете только последние CCC33.3.

+0

Рад, что это сработало для вас. Пожалуйста, подумайте также о повышении, если мой ответ окажется вам полезен (см. [Как повысить уровень переполнения стека?] (Http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) , –

1
[A-Z]{3}[0-9]*[.][0-9]* 

Просто используйте это как механизм регулярных выражений, который всегда запоминает только последнюю группу, когда захватываются несколько непрерывных групп.