首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能遍历Matcher

不能遍历Matcher
EN

Stack Overflow用户
提问于 2014-02-26 19:09:28
回答 1查看 110关注 0票数 0

我想这么做:

代码语言:javascript
复制
String regex= "^[\\d\\D]*([{]([^{}]+)[}])[\\d\\D]*$";
Matcher groupMatcher = Pattern.compile(regex).matcher(command);
int counter = 0;
while(groupMatcher.find()){
  counter++;
}
//print counter

我总是得到计数器1,并且只得到"{name} {do }}“的匹配。例如,无论我如何更改它,我都会得到匹配的{do }。

我想遍历所有的匹配。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 19:37:14

首先,您应该修复您的[\d\D]\D\d的补充,这意味着它将匹配\d没有的任何字符。基本上,这个字符类相当于..

既然如此,让我们将字符类替换为它的等效类:

代码语言:javascript
复制
^.*(\{([^{}]+)\}).*$

在第一个.*之后,regex将已经匹配了所有输入字符串。但是,匹配还没有完成:需要匹配{

因此,除非到达一个.*,否则该{将一个字符一个字符地返回给正则表达式引擎--这将是{do something}之前的{

因此,第一个捕获组将包含{do something}

因此,第一件事是修复您的字符类:我不知道您编写[\d\D]时的意思,但它肯定不是“匹配任何字符”!

下面是一个正则表达式,它将尝试匹配大括号中的所有参数:

代码语言:javascript
复制
\{([^{}]+)\}

Matcher中使用此正则表达式,您将得到匹配(与m.group(1)匹配)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22050907

复制
相关文章

相似问题

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