Java 正则表达式中分组的3种不同用法。

正则表达式可以通过”()”来进行分组,更专业的表达就是捕获组,每个完整的”()”可以分为一组,同时,”()”中还可以嵌套”()”,即组之间还可以存在更小的组,以此类推。而编号为0的组,则是正则表达式匹配到的整体,这个规则只要支持正则表达式中捕获组的语言基本上都适用。

捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部。

Java程序也可以正则表达式完美融入到程序中,而且非常好用,下面介绍几种不同的用法,可以根据自己应用需要进行选择。

普通捕获组编号规则
如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组。在只有普通捕获组的情况下,捕获组的编号是按照“(”出现的顺序,从左到右,从1开始进行编号的 。

正则表达式分组举例:(\d{4})-(\d{2}-(\d\d))

1、在正则表达式中使用组

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

public class Main {
  public static void main(String[] args) {

    // Prepare regular expression. A group of 3 digits followed by 7 digits.
    String regex = "\\b(\\d{3})\\d{7}\\b";
    String source = "1111111111, 1111111, and 1111111111";

    // Compile the regular expression 
    Pattern p = Pattern.compile(regex);

    // Get Matcher object
    Matcher m = p.matcher(source);

    // Start matching and display the found area codes
    while(m.find()) {/** 来 自 时 代 J     a    v  a - nowjava.com**/
      // Display the phone number and area code. 
      // group 1 captures first 3 digits of match, 
      // whereas group 0 will have the entire phone number. 
      // The matched text can be obtained using m.group() or m.group(0)
      String phone = m.group();
      String areaCode = m.group(1);
      System.out.println("Phone: " + phone + ", Area Code: " + areaCode);
    }
  }
}

提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!

2、在正则表达式中使用命名组

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

public class Main {/**来 自 n  o  w  j  a  v  a . c o m**/
  public static void main(String[] args) {

    // Prepare the regular expression
    String regex = "\\b(?<areaCode>\\d{3})(?<prefix>\\d{3})(?<lineNumber>\\d{4})\\b";

    // Reference first two groups by names and the thrd oen as its number
    String replacementText = "(${areaCode}) ${prefix}-$3";
    String source = "1111111111, 1111111, and 1111111111";

    // Compile the regular expression
    Pattern p = Pattern.compile(regex);

    // Get Matcher object
    Matcher m = p.matcher(source);

    // Replace the phone numbers by formatted phone numbers
    /**
    来 自 时 代 J a v a 公 众 号
    **/
    String formattedSource = m.replaceAll(replacementText);
    System.out.println("Text: " + source);
    System.out.println("Formatted Text: " + formattedSource);
  }
}

提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!

3、返回替换文本中引用组

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java