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

javaobject oriented programmingprogramming

如果要在构造正则表达式时指定出现次数,则可以使用量词。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("输入输入文本: ");
      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());
      }
   }
}

输出

输入输入文本:
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("输入输入文本: ");
      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());
      }
   }
}

输出

输入输入文本:
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("输入输入文本: ");
      String input = sc.nextLine();
      String regex = "[0-9]++";
      //创建一个 Pattern 对象
      Pattern pattern = Pattern.compile(regex);
      //匹配字符串中的编译模式
      Matcher matcher = pattern.matcher(input);
      while (matcher.find()) {
         System.out.print(matcher.group());
         System.out.println();
      }
   }
}

输出

输入输入文本:
45678
45678

相关文章