Java使用Regex匹配多个令牌

时间:2012-08-02 11:28:06

标签: java regex token

我找到了一个正则表达式,它匹配用{}包围的标记,但它似乎只找到找到的第一个项目。

如何更改以下代码以便找到所有令牌而不仅仅是{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 {})
}

2 个答案:

答案 0 :(得分:4)

groupCount()方法不返回匹配数,它返回此匹配器模式中的捕获组数。您在模式中定义了一个组,因此此方法返回1.

您可以再次致电find()找到您的模式的下一个匹配项;它将尝试查找与模式匹配的输入序列的下一个子序列。当它返回false时,您将知道没有更多匹配。

因此,你应该像这样迭代你的匹配:

while (m.find()) {
    System.out.println(m.group(0));
}

答案 1 :(得分:1)

是的,在您的代码中,您只需进行一次匹配,并获得在该单个匹配中捕获的组。

如果你想获得其他匹配,你必须在循环中继续匹配,直到find()返回false。

所以你基本上只需要用if替换while并且你就在那里。