代码中的Java修复正则表达式
我需要打印@OPOK,但使用以下代码:
String s = "\"MSG1\":\"00\",\"MSG2\":\"@OPOK\",\"MSG3\":\"XXXXXX\"}";
Pattern pattern = Pattern.compile(".*\"MSG2\":\"(.+)\".*");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
} else {
System.out.println("Match not found");
}
我得到了@OPOK”,“MSG3:“XXXXXX相反,我如何修复我的模式
# 1 楼答案
您可能需要以下内容:
对于您感兴趣的捕获组,这将匹配除双引号以外的任何字符。由于小组被双引号包围,这应该可以防止小组在比赛中“走得太远”
编辑以添加:正如@bmorris591在评论中建议的那样,您可以添加额外的
+
(如下所示)以使量词possessive。这可能有助于在匹配器无法找到匹配项的情况下提高性能# 2 楼答案
你想让你的
.+
部分不情愿。默认情况下,它是贪婪的-它将尽可能多地匹配,而不会阻止模式匹配。您希望它尽可能匹配为小,如下所示:正是} 文档
?
让它不情愿。有关更多详细信息,请参阅^{当然,你也可以与“除了双引号以外的任何角色”进行匹配,这就是布赖恩的方法。据我所知,这两种方法都同样有效;它们之间很可能存在性能差异(老实说,我希望Brian的表现更好),但如果性能对您很重要,您应该测试这两种方法