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;
}
注:本文转载自:http://www.zsm8.com/book/java_Exa/java.util.regex/Greedy.html