Java/Regular Expressions/Greedy

Материал из Java эксперт
Перейти к: навигация, поиск

Greedy and Nongreedy Matching in a Regular Expression

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {

 public static void main(String[] argv) throws Exception {
   // Greedy quantifiers
   String match = find("A.*c", "AbcAbc"); 
   match = find("A.+", "AbcAbc"); 
 }
 public static String find(String patternStr, CharSequence input) {
   Pattern pattern = Pattern.rupile(patternStr);
   Matcher matcher = pattern.matcher(input);
   if (matcher.find()) {
     return matcher.group();
   }
   return null;
 }

}

</source>
   
  
 
  



Greedy Qualifier

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {

 public static void main(String args[]) {
   String regex = "(\\w+)(\\d\\d)(\\w+)";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "X99 asdf 44";
   Matcher matcher = pattern.matcher(candidate);
   matcher.find();
   System.out.println(matcher.group(1));
   System.out.println(matcher.group(2));
   System.out.println(matcher.group(3));
 }

}

</source>
   
  
 
  



Nongreedy quantifiers

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {

 public static void main(String[] argv) throws Exception {
   // Nongreedy quantifiers
   String match = find("A.*?c", "AbcAbc"); 
   match = find("A.+?", "AbcAbc"); 
 }
 public static String find(String patternStr, CharSequence input) {
   Pattern pattern = Pattern.rupile(patternStr);
   Matcher matcher = pattern.matcher(input);
   if (matcher.find()) {
     return matcher.group();
   }
   return null;
 }

}

</source>
   
  
 
  



Reluctant Qualifier Example

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {

 public static void main(String args[]) {
   String regex = "(\\d+?)";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "1234";
   Matcher matcher = pattern.matcher(candidate);
   while (matcher.find()) {
     System.out.println(matcher.group());
   }
   System.out.println("Done");
 }

}

</source>