Java 正則表示式中非捕獲組


使用捕獲組,你可以將多個字元視為一個單元。你只需要將需要分組的字元放在一組括號內。例如 −

(.*)(\d+)(.*)

如果你嘗試匹配多個組,將會捕獲每個組的匹配結果。你可以透過將相應的分組號傳遞給 group() 方法來獲取組的結果。1、2、3 等..(從右到左) 分組 0 表示整個匹配。

示例

 即時演示

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CapturingGroups {
   public static void main( String args[] ) {
      System.out.println("Enter input text");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      String regex = "(.*)(\d+)(.*)";
      //Create a Pattern object
      Pattern pattern = Pattern.compile(regex);
      //Now create matcher object.
      Matcher matcher = pattern.matcher(input);
      if (matcher.find( )) {
         System.out.println("Found value: " + matcher.group(0) );
         System.out.println("Found value: " + matcher.group(1) );
         System.out.println("Found value: " + matcher.group(2) );
         System.out.println("Found value: " + matcher.group(3) );
      } else {
            System.out.println("NO MATCH");
      }
   }
}

輸出

Enter input text
sample data with 1234 (digits) in middle
Found value: sample data with 1234 (digits) in middle
Found value: sample data with 123
Found value: 4
Found value: (digits) in middle

非捕獲組

非捕獲組提供與捕獲組相同的功能,但它不會捕獲結果

例如,如果你需要使用組從文字中匹配網址或電話號碼,因為所需子字串的起始部分是相同的,所以你不需要捕獲某些組的結果,在這種情況下,你可以使用非捕獲組。非捕獲組以 (?: 開始,以 ) 結束。

示例

 即時演示

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CapturingGroups {
   public static void main( String args[] ) {
      System.out.println("Enter input text");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      String regex = "(.*)(?:\d+)(.*)";
      //Create a Pattern object
      Pattern pattern = Pattern.compile(regex);
      //Now create matcher object.
      Matcher matcher = pattern.matcher(input);
      if (matcher.find( )) {
         System.out.println("Found value: " + matcher.group(0) );
         System.out.println("Found value: " + matcher.group(1) );
         System.out.println("Found value: " + matcher.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

輸出

Enter input text
sample data with 1234 (digits) in middle
Found value: sample data with 1234 (digits) in middle
Found value: sample data with 123
Found value: (digits) in middle

注意: 非捕獲組不會包含在組計數中。

更新於: 2020年2月21日

841 次瀏覽

啟動您的 職業生涯

完成課程,獲得認證

開始
廣告
© . All rights reserved.