Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 正则表达式在循环中使用find方法只匹配一次_Java_Regex - Fatal编程技术网

Java 正则表达式在循环中使用find方法只匹配一次

Java 正则表达式在循环中使用find方法只匹配一次,java,regex,Java,Regex,我试图在Java中使用正则表达式来提取{}之间的所有结果,并一次循环一个 这是我正在使用的代码: Pattern p = Pattern.compile("(\\{.*})"); Matcher m = p.matcher(validatePage); while (m.find()) { JSONObject jsonObj = new JSONObject(m.group(1)); System.out.println(jsonObj); } 这是我正在搜索的文本 <

我试图在Java中使用正则表达式来提取{}之间的所有结果,并一次循环一个

这是我正在使用的代码:

Pattern p = Pattern.compile("(\\{.*})");
Matcher m = p.matcher(validatePage);
while (m.find()) {
    JSONObject jsonObj = new JSONObject(m.group(1));
    System.out.println(jsonObj);
}
这是我正在搜索的文本

<tr><td class='warning'></td><td>test-testing-tester@2016-07-08.txt</td>
<td>TEST</td><td class='warningMessage'>[WARNING]</td><td 
class='warningMessage'>File with the revision 2016-07-08 validated 
successfully and is ready to be published. Warnings were detected. Please 
see report.</td></tr>
{"resourceUri":"test-testing-tester@2016-07-08.txt","severity":"WARNING","lineNumber":43,"column":3,"offset":701,"length":118,"message":"extension, version is missing"}
{"resourceUri":"test-testing-tester@2016-07-08.txt","severity":"WARNING","lineNumber":43,"column":3,"offset":701,"length":118,"message":"extension, release is missing"}
{"resourceUri":"test-testing-tester@2016-07-08.rxt","severity":"WARNING","lineNumber":43,"column":3,"offset":701,"length":118,"message":"extension, correction is missing"}
{"resourceUri":"test-testing-tester@2016-07-08.txt","severity":"WARNING","lineNumber":50,"column":3,"offset":825,"length":135,"message":"extension, version is missing"}
测试-tester@2016-07-08.txt
已验证版本为2016-07-08的测试[警告]文件
已成功,并已准备好发布。检测到警告。请
见报告。
{“resourceUri”:“测试”-tester@2016-07-08.txt,“严重性”:“警告”,“行号”:43,“列”:3,“偏移量”:701,“长度”:118,“消息”:“扩展名,版本丢失”}
{“resourceUri”:“测试”-tester@2016-07-08.txt,“严重性”:“警告”,“行号”:43,“列”:3,“偏移量”:701,“长度”:118,“消息”:“缺少扩展,释放”}
{“resourceUri”:“测试”-tester@2016-07-08.rxt,“严重性”:“警告”,“行号”:43,“列”:3,“偏移量”:701,“长度”:118,“消息”:“扩展,缺少更正”}
{“resourceUri”:“测试”-tester@2016-07-08.txt,“严重性”:“警告”,“行号”:50,“列”:3,“偏移量”:825,“长度”:135,“消息”:“扩展名,版本丢失”}
但是,m find()只循环了一次,将第一个结果很好地打印出来,然后结束,我不知道为什么。当我通过正则表达式匹配器运行它时,它发现所有结果都很好。我是否需要做一些事情来匹配每个结果并在其中循环?

您可以使用
(\\{.*?})
使您的正则表达式不贪婪

删除不需要的组作为

Pattern p = Pattern.compile("\\{.*?}");
Matcher m = p.matcher(validatePage);
while (m.find()) {
    JSONObject jsonObj = new JSONObject(m.group());
    System.out.println(jsonObj);
}

请尝试
(\\{.*?})
无法复制。代码找到4个匹配项。请参阅。在查看代码和我自己的答案后-无法复制。@Pavneet_Singh好吧,我已经发布了证据,证明文本在多行,按照问题中的显示方式,没有问题。@Andreas看起来OP是从某个文件或某个响应中读取的,将其收集为字符串或将字符串连接为一体的东西。例如,使用扫描仪从文件中读取并将其组合为单个字符串以再现问题。4个预期匹配项似乎位于不同的行上,
与换行符不匹配,因此,它不是贪婪地消耗所有4合一的发现。我在eclipse上测试了它,贪婪的版本将每一个值都捕获为一行,正如建议的获取4个匹配项这工作完美让我疯狂,非常感谢!!那么文本就不在多行了,如问题所示!