我有一个正则表达式:
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。
答案 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]