我想这么做:
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 }。
我想遍历所有的匹配。我该怎么做呢?
发布于 2014-02-26 19:37:14
首先,您应该修复您的[\d\D]:\D是\d的补充,这意味着它将匹配\d没有的任何字符。基本上,这个字符类相当于..
既然如此,让我们将字符类替换为它的等效类:
^.*(\{([^{}]+)\}).*$在第一个.*之后,regex将已经匹配了所有输入字符串。但是,匹配还没有完成:需要匹配{。
因此,除非到达一个.*,否则该{将一个字符一个字符地返回给正则表达式引擎--这将是{do something}之前的{。
因此,第一个捕获组将包含{do something}。
因此,第一件事是修复您的字符类:我不知道您编写[\d\D]时的意思,但它肯定不是“匹配任何字符”!
下面是一个正则表达式,它将尝试匹配大括号中的所有参数:
\{([^{}]+)\}在Matcher中使用此正则表达式,您将得到匹配(与m.group(1)匹配)。
https://stackoverflow.com/questions/22050907
复制相似问题