首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java regex中捕获组

在Java regex中捕获组
EN

Stack Overflow用户
提问于 2012-07-19 08:35:29
回答 1查看 1.8K关注 0票数 1

我写了这个正则表达式:

代码语言:javascript
运行
复制
String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((\\d+|\\d+-\\d+),\\s+)*(\\d+|\\d+-\\d+)$";

下面是我的主要方法:

代码语言:javascript
运行
复制
  public static void main(String... args) {
    Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7");
    if (matcher.matches()) {
      for (int index = 0; index <= matcher.groupCount(); index++) {
        System.out.println(index + ": " + matcher.group(index));
      }
    }
  }

下面是我的输出:

代码语言:javascript
运行
复制
0:  match cos 1, 3, 4, 5-7
1: null
2: 4, 
3: 4
4: 5-7

看起来13没有被捕获。(输出45-7没有问题。)我如何修复我的正则表达式,以便能够捕获它们(并在最后捕获它们而不使用逗号)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 09:02:13

例如,如果您的目标是找到something elsesomething not else预测的数字,那么可以将它们分组到一个组中,然后使用,\\s+进行拆分

代码语言:javascript
运行
复制
String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((((\\d+|\\d+-\\d+),\\s+)*)(\\d+|\\d+-\\d+))$";
Pattern PATTERN = Pattern.compile(REGEX);
Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7");
if (matcher.matches()) {
    System.out
            .println(Arrays.toString(matcher.group(2).split(",\\s+")));
}

输出:

代码语言:javascript
运行
复制
[1, 3, 4, 5-7]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11552387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档