我在提取“()”内的值时遇到了正则表达式问题

下面是我同样使用的Java问题。我不知道这是怎么了。

Pattern PARSER = Pattern.compile("\\([^\\(\\)]+?\\)");
Matcher listMatcher = PARSER.matcher("((\"as_station_id\", string), hello World (\"as_parameter\",     string))");
boolean listFind = listMatcher.find();
if (listFind) {
    for (int i = 0; i <= listMatcher.groupCount(); i++) {
    String listMatch = listMatcher.group(i);
    System.out.println(listMatch);
    }
}


实际输出:

("as_station_id", string)


预期产量:

("as_station_id", string)
("as_parameter", string)


任何帮助表示赞赏

最佳答案

.find()仅适用一次;您需要遍历它以找到所有匹配项:

while (listMatcher.find())
    // operate on listMatcher


没有更多匹配项时,.find()将返回false

同样,.group(n)将返回与正则表达式中第n个捕获组匹配的文本(并且您没有);特殊情况.group(0)将返回所有匹配项。它等效于.group()

因此,您的循环确实应该是:

while (listMatcher.find())
    System.out.println(listMatcher.group());

09-07 02:06