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

java 8object oriented programmingprogramming

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

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

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

  • ((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 后面跟着 5 次 2
      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("not matched!");
      }
      //\1 as back reference to capturing group (\d)
      pattern = "(\d)\1{5}";
      r = Pattern.compile(pattern);
      m = r.matcher(test);
      if (m.find( )) {
         System.out.println("Matched!");
      }else {
         System.out.println("not matched!");
      }
   }
}

输出

Matched!
Matched!

相关文章