Java正则表达式中group()、group(i)、groupCount()

原文地址:

http://blog.163.com/xiejunshlh@126/blog/static/1662603142011219625597/

2011-03-19 18:20:36|  分类: 默认分类 |举报|字号 订阅
          要弄清这三个方法,首先要弄清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.csdn.net/zhuche110/article/details/2233023


还有一种嵌套关系的:

采用正则 (a(b))(c) match 结果入下:
分组 捕获
$1(group1) ab
$2(group2) b
$3(group3) c



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值