Java正则表达式-组

1 什么是组

我们可以用括号将多个字符分组为一个单位。例如,(ab)。

正则表达式中的每个组都有一个组号,该组号从1开始。

groupCount()来自Matcher类的方法,返回与Matcher实例关联的模式中的组数。

组0引用了整个正则表达式,而groupCount() 方法未报告该组。

正则表达式中的每个左括号都标志着一个新组的开始。

我们可以在正则表达式中引用组号。

假设我们要匹配以"abc"开头,后跟"xyz"和"abc"开头的文本。

我们可以将正则表达式写为"abcxyzabc"。

我们可以使用反向引用将正则表达式重写为"(abc)xyz\1"。 \1指的是第1组,即(abc)。

\2引用第2组,\3引用第3组,依此类推。

以下代码显示了如何显示格式化的电话号码。在正则表达式中\b(\d{3})(\d{3})(\d{4})\b, \b表示我们只对单词边界处的十位数字感兴趣。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
//www.yiidian.com 一点教程网
public class Main {
  public static void main(String[] args) {
    String regex = "\\b(\\d{3})(\\d{3})(\\d{4})\\b";

    Pattern p = Pattern.compile(regex);
    String source = "1234567890, 12345,  and  9876543210";

    Matcher m = p.matcher(source);

    while (m.find()) {
      System.out.println("Phone: " + m.group() + ", Formatted Phone:  ("
          + m.group(1) + ") " + m.group(2) + "-" + m.group(3));
    }
  }
}

以上代码执行结果为:

Phone:1234567890,Formatted Phone:(123)456-7890
Phone:9876543210,Formatted Phone:(987)654-3210

2 组的案例

以下代码表示如何在替换文本中引用组。

$n,其中n是组号,替换文本内指的是group的匹配文本n。

例如,$1指的是第一个匹配的组。要重新格式化电话号码,我们将使用($1) $2-$3。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*www.yiidian.com 一点教程网*/
public class Main {
  public static void main(String[] args) {
    String regex = "\\b(\\d{3})(\\d{3})(\\d{4})\\b";
    String replacementText = "($1) $2-$3";
    String source = "1234567890, 12345, and 9876543210";

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(source);

    String formattedSource = m.replaceAll(replacementText);

    System.out.println("Text: " + source);
    System.out.println("Formatted Text: " + formattedSource);
  }
}

以上代码执行结果为:

Text:1234567890,and 9876543210
  Formatted Text:(123)456-7890,12345,and (987)654-3210

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码