我找到了一个正则表达式,它匹配用{}包围的标记,但它似乎只找到找到的第一个项目。
如何更改以下代码以便找到所有令牌而不仅仅是{World},我是否需要使用循环?
// The search string
String str = "Hello {World} this {is} a {Tokens} test";
// The Regular expression (Finds {word} tokens)
Pattern pt = Pattern.compile("\\{([^}]*)\\}");
// Match the string with the pattern
Matcher m = pt.matcher(str);
// If results are found
if (m.find()) {
System.out.println(m);
System.out.println(m.groupCount()); // 1
System.out.println(m.group(0)); // {World}
System.out.println(m.group(1)); // World (Get without {})
}
答案 0 :(得分:4)
groupCount()
方法不返回匹配数,它返回此匹配器模式中的捕获组数。您在模式中定义了一个组,因此此方法返回1.
您可以再次致电find()
找到您的模式的下一个匹配项;它将尝试查找与模式匹配的输入序列的下一个子序列。当它返回false
时,您将知道没有更多匹配。
因此,你应该像这样迭代你的匹配:
while (m.find()) {
System.out.println(m.group(0));
}
答案 1 :(得分:1)
是的,在您的代码中,您只需进行一次匹配,并获得在该单个匹配中捕获的组。
如果你想获得其他匹配,你必须在循环中继续匹配,直到find()
返回false。
所以你基本上只需要用if
替换while
并且你就在那里。