Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式捕获不工作_Java_Regex - Fatal编程技术网

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所说的那样,这是一个很好的方法,但我给出的这个例子是我实际尝试实现的一个极其简化的版本这是一个很好的方法,但我给出的这个示例是我实际尝试实现的一个极其简化的版本