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

Comments

2 Feb 2010 - 6:03pm by Harit (not verified)

awesome example, thanks

14 May 2010 - 3:16pm by Anonymous (not verified)

I get _find("A.+?", "AbcAbc");_ returning _Ab_.

2 Aug 2010 - 2:41pm by BananielTheSpaniel (not verified)

@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'.

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.