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 次瀏覽

開啟您的 職業

完成課程獲得認證

開始學習
廣告
© . All rights reserved.