Java正则表达式捕获不起作用

时间:2011-11-18 01:03:32

标签: java regex

我有一个正则表达式:

l:([0-9]+)

这应匹配此字符串并返回三个捕获(根据Rubular

"l:32, l:98, l:234"

这是我的代码:

Pattern p ...
Matcher m = p.matcher(...);
m.find();
System.out.println(m.groupCount());

当有三个时,打印出1(组),所以我只能做m.group(1)只返回32。

4 个答案:

答案 0 :(得分:3)

调用Matcher.find找到匹配的 next 实例,如果没有,则返回false。尝试调用它三次,看看你是否拥有所有预期的组。

为了澄清,m.group(1)正在尝试在正则表达式中找到第一个组表达式 。你的正则表达式中只有一个这样的组表达式,所以group(2)永远不会有意义。您可能需要在循环中调用m.find(),直到它返回false,在每次迭代时抓取组结果。

答案 1 :(得分:1)

我认为需要

Pattern p ...
Matcher m = p.matcher(...);
int count = 0;

while(m.find()) {
    count++;
}
System.out.println(count);

查找下一个匹配项,因此使用while循环将找到所有匹配项。

答案 2 :(得分:1)

当没有更多匹配项时,

Matcher.find()会返回false,因此您可以在获取和处理每个while loop时执行group。例如,如果要打印所有匹配项,可以使用以下内容:

    Matcher m;
    Pattern p = Pattern.compile("l:([0-9]+)");
    m = p.matcher("l:32, l:98, l:1234");

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

答案 3 :(得分:1)

如果输入字符串格式已修复,您可以使用以下正则表达式

"l:32, l:98, l:234".split("(, )?l:")

输出

[, 32, 98, 234]