Java - выражение Reg с использованием групп - PullRequest
4 голосов
/ 26 июня 2009

Из строки мне нужно вытащить группы, которые соответствуют заданному шаблону.

Пример строки: <XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>

Каждая группа должна начинаться с <XmlLrvs> и заканчиваться </XmlLrvs>. Вот фрагмент моего кода ...

String patternStr = "(<XmlLrvs>.+?</XmlLrvs>)+";

// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(text);
matcher.matches();

// Get all groups for this match
for (int i = 1; i<=matcher.groupCount(); i++) {
   System.out.println(matcher.group(i));
}

Выход <XmlLrvs>Third</XmlLrvs>. Я ожидаю группу первым и вторым, но они не захвачены. Кто-нибудь может помочь?

Ответы [ 2 ]

8 голосов
/ 26 июня 2009

Вы перебираете группы, когда должны перебирать совпадения. Метод matches() проверяет весь ввод на совпадение. То, что вы хотите, это метод find().

Изменение

matcher.matches();

for (int i = 1; i<=matcher.groupCount(); i++) {
    System.out.println(matcher.group(i));
}

до

while (matcher.find()) {
    System.out.println(matcher.group(1));
}
0 голосов
/ 26 июня 2009

Попробуйте
String patternStr = "<XmlLrvs>(.*?)</XmlLrvs>";<br> String text = "<XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>";<br> Pattern pattern = Pattern.compile(patternStr);<br></p> <p>Matcher matcher = pattern.matcher(text);<br></p> <p>while (matcher.find()) {<br> System.out.println(matcher.group(1));<br> }<br></p> <p>The output is FIRST,SECOND,Third

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...