Java正则表达式捕获不工作
我有一个正则表达式:Java正则表达式捕获不工作,java,regex,Java,Regex,我有一个正则表达式: l:([0-9]+) 这应该匹配此字符串并返回三个捕获(根据) 这是我的密码: Pattern p ... Matcher m = p.matcher(...); m.find(); System.out.println(m.groupCount()); 当有三个时,这会打印出1(组),因此我只能执行m.group(1),它只返回32。调用Matcher.find查找匹配的下一个实例,如果没有更多实例,则返回false。试着给它打三次电话,看看你是否有所有预期的群组 为
l:([0-9]+)
这应该匹配此字符串并返回三个捕获(根据)
这是我的密码:
Pattern p ...
Matcher m = p.matcher(...);
m.find();
System.out.println(m.groupCount());
当有三个时,这会打印出1(组),因此我只能执行
m.group(1)
,它只返回32。调用Matcher.find
查找匹配的下一个实例,如果没有更多实例,则返回false。试着给它打三次电话,看看你是否有所有预期的群组
为了澄清,
m.group(1)
正在尝试在正则表达式中查找第一个组表达式。您的正则表达式中只有一个这样的组表达式,因此group(2)
永远没有意义。您可能需要在循环中调用m.find()
,直到它返回false,在每次迭代中获取组结果。调用Matcher.find
查找匹配的下一个实例,如果没有更多实例,则返回false。试着给它打三次电话,看看你是否有所有预期的群组
为了澄清,
m.group(1)
正在尝试在正则表达式中查找第一个组表达式。您的正则表达式中只有一个这样的组表达式,因此group(2)
永远没有意义。您可能需要在循环中调用m.find()
,直到它返回false,在每次迭代中获取组结果。
Pattern p ...
Matcher m = p.matcher(...);
int count = 0;
while(m.find()) {
count++;
}
System.out.println(count);
find查找下一个匹配项,因此使用while循环将查找所有匹配项。我认为它需要
Pattern p ...
Matcher m = p.matcher(...);
int count = 0;
while(m.find()) {
count++;
}
System.out.println(count);
查找查找下一个匹配项,因此使用while循环将查找所有匹配项。Matcher.find()在没有更多匹配项时返回false,因此您可以在获取和处理每个组时执行while循环。例如,如果要打印所有匹配项,可以使用以下选项:
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());
}
Matcher.find()
在没有更多匹配项时返回false,因此您可以在获取和处理每个组时执行while循环
。例如,如果要打印所有匹配项,可以使用以下选项:
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());
}
如果输入字符串格式是固定的,您可以使用以下正则表达式
"l:32, l:98, l:234".split("(, )?l:")
输出
[, 32, 98, 234]
如果输入字符串格式是固定的,您可以使用以下正则表达式
"l:32, l:98, l:234".split("(, )?l:")
输出
[, 32, 98, 234]
谢谢,这个有用。我只是在做而(m.find())。。。m、 第(1)组代码>就像@Deco saidThanks一样,这很有效。我只是在做而(m.find())。。。m、 第(1)组代码>就像@Deco所说的那样,这是一个很好的方法,但我给出的这个例子是我实际尝试实现的一个极其简化的版本这是一个很好的方法,但我给出的这个示例是我实际尝试实现的一个极其简化的版本