在Java Regex中捕获组和反向引用

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

捕获组通过从左到右计数其开括号来编号。

例如,在表达式((A)(B(C)))中,有四个这样的组-

  • ((A)(B(C)))

  • (一种)

  • (公元前))

  • (C)

反向引用允许使用\#等数字重复捕获组,其中#是组

数。请参阅下面的示例-

示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Tester {
   public static void main(String[] args) {
      //2次接着2次5次
      String test = "222222";
      String pattern = "(\\d\\d\\d\\d\\d)";
      Pattern r = Pattern.compile(pattern);
      Matcher m = r.matcher(test);
      if (m.find( )) {
         System.out.println("Matched!");
      }else {
         System.out.println("不匹配!");
      }
      //\ 1作为对捕获组(\ d)的反向引用
      pattern = "(\\d)\\1{5}";
      r = Pattern.compile(pattern);
      m = r.matcher(test);
      if (m.find( )) {
         System.out.println("Matched!");
      }else {
         System.out.println("不匹配!");
      }
   }
}

输出结果

Matched!
Matched!