非捕获组 non-capturing

本文通过两个示例介绍了正则表达式中非捕获组的应用,特别是零宽度正向先行断言(?=X)X的概念,帮助读者理解如何使用这种特殊的语法来精确匹配目标字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看帖子:

 

    http://topic.youkuaiyun.com/u/20090903/10/42c34333-502e-40f2-aa65-dbebce8215a1.html?seed=1630205838&r=59556811#r_59556811

 

 

正则的高级应用之非捕获组的 ?=

 

1.

public static void main(String[] args) {
       
// (?=X) X, via zero-width positive lookahead
        String test1 = "aba";
        String regex1
= "[a-z](?=b)(b[a-z])";
       
boolean b = test1.matches(regex1);
        System.out.println(b);
    }

//结果是true
// ^ $  可以不加,因为不是multiline.
//如果regex1改成"[a-z](?=b)([a-z])"  缺少那个b就不对了。因为b不占位,下一组还要从b开始的.

 

 

 2.

 

public static void main(String[] args) {

// (?=X) X, via zero-width positive lookahead

String test1 = "abacaba";

String regex1 =  "([a-z](?=b))(ba)";

Pattern p = Pattern.compile(regex1);

Matcher matcher = p.matcher(test1);

 

while(matcher.find()){

System.out.println(matcher.start()+" : "+matcher.end());

}

结果是

 

    0 : 3

    4 : 7

 

 

(?=X) X,通过零宽度的正 lookahead , 注意那个零宽度就能明白怎么回事了.

 

 

 

注:本人文笔不好,不会太写Blog。这里只是随记而已,以备不时之需。

文本的格式总是对不齐啊,晕死 - -!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值