Java 正则表达式中的量词类型


如果你想在构造正则表达式时指定出现次数,可以使用量词。Java 支持三种类型的量词:贪婪量词、勉强量词和独占量词。

贪婪量词 − 贪婪量词是默认的量词。一个贪婪量词尽可能多地匹配输入字符串(最长的可能匹配),如果匹配未发生,它将离开最后一个字符,并再次匹配。

例如

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input text: ");
      String input = sc.nextLine();
      String regex = "[0-9]+";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Matching the compiled pattern in the String
      Matcher matcher = pattern.matcher(input);
      System.out.println(""Matched text: );
      while (matcher.find()) {
         System.out.println(matcher.group());
      }
   }
}

输出

Enter input text:
Matched text:
45545

勉强量词 − 一个非贪婪/勉强量词尽可能少地匹配,首先非贪婪量词匹配第一个字符,如果匹配未发生,它将从输入字符串中添加另一个字符并尝试匹配。如果你在贪婪量词后放置一个“?”,它将变得勉强或非贪婪量词。

例如

 实时演示

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input text: ");
      String input = sc.nextLine();
      String regex = "[0-9]+?";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Matching the compiled pattern in the String
      Matcher matcher = pattern.matcher(input);
      while (matcher.find()) {
         System.out.println(matcher.group());
      }
   }
}

输出

Enter input text:
12345678
1
2
3
4
5
6
7
8

独占量词 − 一个独占量词类似于贪婪量词,唯一的区别是它尝试一开始尽可能匹配更多字符,并且如果匹配未发生,与贪婪量词不同,它不会回溯。

如果你在贪婪量词后放置一个“+”,它将变得独占量词。以下是独占量词的列表

例如

 实时演示

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input text: ");
      String input = sc.nextLine();
      String regex = "[0-9]++";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Matching the compiled pattern in the String
      Matcher matcher = pattern.matcher(input);
      while (matcher.find()) {
         System.out.print(matcher.group());
         System.out.println();
      }
   }
}

输出

Enter input text:
45678
45678

更新于: 2020 年 7 月 13 日

697 次浏览

开启您的 职业

完成课程获得认证

开始学习
广告