Java正则表达式中的捕获组的概念(转)

要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念。捕获组也就是Pattern中以括号对“()”分割出的子Pattern。至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分。
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 "(x)(y\\w*)(z)" 中,存在三个这样的组: 
1.  x
2.  y\\w*
3.  z
组零始终代表整个表达式。
之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器获取。
以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。

Example:

package pattern;

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

public class testRegex {
    public static void main(String[] args) {
        String regex = "(x)(y\\w*)(z)";

String input = "exy123z,xy456z";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(input);

while (m.find()) {
            System.out.println(m.group(2));
        }
    }
}

运行结果:
y123
y456

http://blog.163.com/[email protected]/blog/static/1662603142011219625597/

Java正则表达式中的捕获组的概念(转)

时间: 2024-10-29 19:08:01

Java正则表达式中的捕获组的概念(转)的相关文章

Java Matcher类 replaceAll 捕获组使用及使用符号$引用捕获组

Java Matcher类 replaceAll 捕获组使用及使用符号$引用捕获组 最近看了一段解析URL以判断支付方式是在线支付还是具体哪个网银或支付宝的代码.如下 private String[] getAction(String url){ String action = null; String pluginid = null; String pattern = "/(\\w+)_(\\w+)_(\\w+).html(.*)"; Pattern p = Pattern.comp

解惑正则表达式中的捕获

读jQuery源码,其中不可避免的要弄明白正则表达式,在此对非捕获组(non-capturing)进行了一些梳理. 关于捕获的一些主要用法 (?:X) (?=X) (?<=X) (?!X) (?<!X) 捕获 要书明白捕获,就要先从分组开始.重复单字符我们可以使用限定符,如果重复字符串,用什么呢? 对!用小括号,小括号里包裹指定字表达式(子串),这就是分组.之后就可以限定这个子表示的重复次数了. 那么,什么是捕获呢?使用小括号指定一个子表达式后,匹配这个子表达式的文本(即匹配的内容)可以在表达

关于 Java正则表达式中的Possessive数量修饰词的理解

关于 Java正则表达式中的Possessive数量修饰词的理解 正则表达式对于数量限定符如 ?, + , *, {n, m} 的匹配默认是贪婪模式,比如: a.*b   匹配 acbab 的结果是 acbab 而不是acb 正则表达式支持懒惰模式,也就是在数量限定符后加一个数量修饰词(quantifier),用问号表示, 比如: a.*?b 匹配 acbab 的结果是 acb 而不是acbab 而Java语言在正则表达式中支持一种Possessive 数量修饰词 ,用加号表示.其字面意思是像贪

正则表达式中的捕获和非捕获

之前我们在做例子的时候,我们看到过这种捕获的形式,我们也试过反向引用.那像我们捕获的内容,可以通过一个正则表达式的模式,或者部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储.缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式.每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数.当然,如果我们不想捕获我们的文本,可以使用非捕获元字符 '?:'.'?=' 或 '?!' 来重写捕获

[转]java异常中Exception捕获不到的异常

一 概念 众所周知java提供了丰富的异常类,这些异常类之间有严格的集成关系,分类为 父类Throwable Throwable的两个子类Error和Exception Exception的两个子类CheckedException和RuntimeException 二 发现问题 通常捕获异常catch的时候最大catch到Exception这个类就为止了,当然这能够处理大部分的异常情况. 但是值得注意的是,Exception不能捕捉到所有的异常.比如InvocationTargetExcepti

java正则表达式中的POSIX 字符类和Unicode 块和类别的类介绍

假如现在有一个需求,要你用Java语言来匹配出一个文本里面的所有(英文半角)标点符号,你会怎么写呢?我想大多数人应该是把这些符号都罗列出来, 如: !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~ 但[!"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~]这样写需要转义一下, 结果为: [-!"\#\$%&'()*+,./:;<=>

正则表达式中的平衡组

理解记录: (?<g>exp1) 遇到匹配exp1的情况在对组g 入栈 (?<-g>exp2) 遇到匹配exp2的情况对组g 出栈 (?(g)(?!)) 对组g进行一次断言,如果不空为,则失败 反之 匹配成功 或者这样解读, (?!) 要求(g)要为空 否则就返回匹配失败,它是 ‘零宽度负预测先行断言’ 如果栈 那么 不会为负数吧, 原文地址:https://www.cnblogs.com/ProjectDD/p/10662463.html

Java 正则表达式之捕获组

Java 正则表达式之捕获组 1. Java 正则表达式基础 2. Java 正则表达式之捕获组 一.概述 1.1 什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用.当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部. 捕获组有两种形式,一种是普通捕获组,另一种是命名捕获组,通常所说的捕获组指的是普通捕获组.语法如下: 普通捕获组:(Expression) 命名捕获组:(?<name>Expression) 普通捕获组

正则基础之——捕获组(capture group)

1        概述 1.1     什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用.当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部. 捕获组有两种形式,一种是普通捕获组,另一种是命名捕获组,通常所说的捕获组指的是普通捕获组.语法如下: 普通捕获组:(Expression) 命名捕获组:(?<name>Expression) 普通捕获组在大多数支持正则表达式的语言或工具中都是支持的,而命名捕获组目前只有.NET