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]+";
      //创建一个pattern 对象
      Pattern pattern = Pattern.compile(regex);
      //匹配字符串中的编译模式
      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]+?";
      //pattern
      Pattern pattern = Pattern.compile(regex);
      //匹配字符串中的编译模式
      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);
      //匹配字符串中的编译模式
      Matcher matcher = pattern.matcher(input);
      while (matcher.find()) {
         System.out.print(matcher.group());
         System.out.println();
      }
   }
}
输出结果
Enter input text:
45678
45678