尝试用Java理解正则表达式中的"捕获组"

Rol*_*all 5 java regex capture

我正在攻读java OCP,目前我仍然坚持理解"捕获组"部分.这是一种过于抽象的描述.你能不能(如果你有时间)用"捕捉小组"给我一些真实的例子?

有人能够为我提供以下陈述的具体例子吗?

捕获组是将多个字符视为一个单元的一种方法.它们是通过将要分组的字符放在一组括号中来创建的.例如,正则表达式(dog)创建一个包含字母"d""o"和"g"的组.与捕获组匹配的输入字符串部分将保存在内存中,以便以后通过反向引用进行调用(如下面的"反向引用"一节中所述).

我很确定,只要看到一个具体的例子,我就会得到它.

提前致谢.

das*_*ght 13

除此之外,正则表达式允许您获取与正则表达式的各个部分匹配的输入部分.有时您需要整场比赛,但通常只需要一部分比赛.例如,此正则表达式匹配"Page X of Y"字符串:

Page \d+ of \d+
Run Code Online (Sandbox Code Playgroud)

如果你传递一个字符串

Page 14 of 203
Run Code Online (Sandbox Code Playgroud)

你将匹配整个字符串.现在让我们说你只想14203.没问题 - 正则表达式库允许您将两者括\d+在括号中,然后仅从匹配中检索"14""203"字符串.

Page (\d+) of (\d+)
Run Code Online (Sandbox Code Playgroud)

上面的表达式创建了两个捕获组.Matcher通过匹配模式获得的对象允许您单独检索这些组的内容:

Pattern p = Pattern.compile("Page (\\d+) of (\\d+)");
String text = "Page 14 of 203";
Matcher m = p.matcher(text);
if (m.find()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}
Run Code Online (Sandbox Code Playgroud)

这打印14203.

在ideone上演示.