我正在尝试这样做:
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 something}匹配。
我想迭代所有的比赛。我该怎么做?
答案 0 :(得分:2)
首先,您应该修复[\d\D]
:\D
是\d
的补码,这意味着它将匹配\d
不匹配的任何字符。基本上,这个字符类相当于.
...
鉴于此,让我们用等效的字符替换字符类:
^.*(\{([^{}]+)\}).*$
在第一个.*
之后,正则表达式已经匹配了所有输入字符串。但是,匹配不完整:需要匹配{
。
因此,.*
逐个字符地向正则表达式引擎返回,除非它到达{
- 这将是{
之前的{do something}
。
因此,您的第一个捕获组将包含{do something}
。
首先要修复你的角色类:我不知道你写[\d\D]
时的意思,但肯定不是“匹配任何角色”!
这是一个正则表达式,它将尝试匹配大括号内的所有参数:
\{([^{}]+)\}
在Matcher
中使用此正则表达式,您将获得匹配(m.group(1)
)。