【问题标题】:java regex capture groupjava 正则表达式捕获组
【发布时间】:2011-07-28 20:40:06
【问题描述】:

我试图在 : using java expr 之后捕获正确的部分,但是在下面的代码中,打印的捕获组是整个字符串,有什么问题吗?

String s ="xyz: 123a-45";   
String patternStr="xyz:[ \\t]*([\\S ]+)";
Pattern p = Pattern.compile(patternStr);
Matcher m = p.matcher(s);
//System.err.println(s);
if(m.find()){
    int count = m.groupCount();
    System.out.println("group count is "+count);
    for(int i=0;i<count;i++){
        System.out.println(m.group(i));
    }
}

【问题讨论】:

    标签: java regex


    【解决方案1】:

    子组编号从 1 开始,0 为全文。用你的循环直到 count+1。

    【讨论】:

    • 更准确地说,将for循环条件更改为i&lt;=count
    【解决方案2】:

    这是因为组的索引从 1 开始。组 0 是整个模式。

    来自 JavaDoc:“捕获组从左到右索引,从 1 开始。组 0 表示整个模式,因此表达式 m.group(0) 等价于 m.group()。” 查看更多here

    【讨论】:

    • 我认为对此的困惑源于文档混淆了“索引”(始终从 0)与“编号”(从您喜欢的任何值)。
    猜你喜欢
    • 2013-07-31
    • 2014-08-17
    • 2013-05-07
    • 2011-10-19
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多