With regex, accessing multiple groups under quantifiers

V

valan.wood

In http://www.javaregex.com/RegexRecipesV1.pdf, I found a nifty little
example which illustrates what I'm trying to do:

Pattern p = Pattern.compile("(?i)((apple|orange|banana)[\\s,]*)+");
String txt = "List some fruits: apple, orange, banana";
Matcher m = p.matcher(txt);
boolean found = m.find();
System.out.println(m.group());
// Prints "apple, orange, banana"
System.out.println(m.group(1));
// Prints "banana"
System.out.println(m.group(2));
// Prints "banana"

Notice how it grabs "banana", but not "apple" or "orange". I'm
thinking it should match all three, for a total of 6 groups. Is there
a way to match all six without introducing a while (m.find()) loop?
 
J

Joshua Cranmer

In http://www.javaregex.com/RegexRecipesV1.pdf, I found a nifty little
example which illustrates what I'm trying to do:

Pattern p = Pattern.compile("(?i)((apple|orange|banana)[\\s,]*)+");
String txt = "List some fruits: apple, orange, banana";
Matcher m = p.matcher(txt);
boolean found = m.find();
System.out.println(m.group());
// Prints "apple, orange, banana"
System.out.println(m.group(1));
// Prints "banana"
System.out.println(m.group(2));
// Prints "banana"

Notice how it grabs "banana", but not "apple" or "orange". I'm
thinking it should match all three, for a total of 6 groups. Is there
a way to match all six without introducing a while (m.find()) loop?
Why, oh why, don't people bother to read documentation these days? I
will quote to you directly from the JavaDocs for java.util.regex.Pattern

The captured input associated with a group is always the subsequence
that the group *most recently matched.* If a group is evaluated a second
time because of quantification then its previously-captured value, if
any, will be retained if the second evaluation fails. [ Emphasis added ]

The short answer to your question is: no.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top