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