Greedy and Nongreedy Matching in a Regular Expression
By default, pattern matching is greedy, which means that the matcher
returns the longest match possible. For example, applying the pattern
A.*c to AbcAbcA matches AbcAbc rather than the shorter
Abc. To do nongreedy matching, a question mark must be added to
the quantifier. For example, the pattern A.*?c will find the
shortest match possible.
// Greedy quantifiers
String match = find("A.*c", "AbcAbc"); // AbcAbc
match = find("A.+", "AbcAbc"); // AbcAbc
// Nongreedy quantifiers
match = find("A.*?c", "AbcAbc"); // Abc
match = find("A.+?", "AbcAbc"); // Abc
// Returns the first substring in input that matches the pattern.
// Returns null if no match found.
public static String find(String patternStr, CharSequence input) {
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
return matcher.group();
}
return null;
}
awesome example, thanks
I get _find("A.+?", "AbcAbc");_ returning _Ab_.
@PreviousPoster: It's about accuracy, too (especially with Regex's). You were so diligent to get the program running but haven't looked at the details. For the afterworld still riddling about it...The Regex of the anonymous poster is missing the char 'c'.