Ken P
Ken P

Reputation:

Java - Reg expression using groups

From a string, I need to pull out groups that match a given pattern.

An example string: <XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>

Each group shall begin with <XmlLrvs> and end with </XmlLrvs>. Here is a snippet of my code...

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));
}

The output is <XmlLrvs>Third</XmlLrvs>. I am expecting group first and second but those aren't being captured. Can anyone assist?

Upvotes: 4

Views: 3879

Answers (2)

Ivan
Ivan

Reputation:

Try it
String patternStr = "<XmlLrvs>(.*?)</XmlLrvs>";
String text = "<XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>";
Pattern pattern = Pattern.compile(patternStr);

Matcher matcher = pattern.matcher(text);

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

The output is FIRST,SECOND,Third

Upvotes: 0

waxwing
waxwing

Reputation: 18783

You are iterating over the groups when you should be iterating over matches. The matches() method checks the entire input for a match. What you want is the find() method.

Change

matcher.matches();

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

to

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

Upvotes: 8

Related Questions