Java Regex - 捕获组


捕获组是将多个字符视为一个单元的一种方法。它们是通过将要分组的字符放在一组括号内来创建的。例如,正则表达式 (dog) 创建一个包含字母“d”、“o”和“g”的组。

捕获组通过从左到右数其左括号来编号。例如,在表达式 ((A)(B(C))) 中,有四个这样的组 -

  • ((A)(B(C)))
  • (A)
  • (公元前))
  • (C)

要了解表达式中存在多少个组,请调用匹配器对象的 groupCount 方法。groupCount 方法返回一个int,显示匹配器模式中存在的捕获组的数量。

还有一个特殊的组,组 0,它始终代表整个表达式。该组不包含在 groupCount 报告的总数中。

例子

以下示例说明如何从给定的字母数字字符串中查找数字字符串 -

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {
   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

这将产生以下结果 -

输出

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0