大括号之间的 Java 正则表达式匹配

2022-09-02 11:31:57

我需要解析一个日志文件并获取时间和关联的函数调用字符串 这存储在日志文件中,如下所示:{“time” : “2012-09-24T03:08:50”, “message” : “Call() started”}

在其他字符串字符之间将有多个记录的时间函数调用,因此我希望使用正则表达式来遍历文件并获取所有这些

我想获取整个记录的信息,包括大括号

我试过以下方法

Pattern logEntry = Pattern.compile("{(.*?)}");
Matcher matchPattern = logEntry.matcher(file);

Pattern.compile("{[^{}]*}");
Matcher matchPattern = logEntry.matcher(file);

我不断得到非法重复错误,请帮忙!谢谢。


答案 1

您需要用“\”转义“{”和“}”

所以:变成:"{(.*?)}""\\{(.*?)\\}"

其中,您必须先用另一个“\”转义“\”

请参阅:http://www.regular-expressions.info/reference.html 以获取需要转义的字符的完整列表...


答案 2

Braces是用于重复组的特殊正则表达式字符,因此必须对它们进行转义。

Pattern logEntry = Pattern.compile("\\{(.*?)\\}");

简单的测试仪:

 public static void main(String[] args) throws Exception {
        String x =  "{\"time\" : \"2012-09-24T03:08:50\", \"message\" : \"Call() started\"}";
        Pattern logEntry = Pattern.compile("\\{(.*?)\\}");
        Matcher matchPattern = logEntry.matcher(x);

        while(matchPattern.find()) {
            System.out.println(matchPattern.group(1));
        }

    }

给我:

"time" : "2012-09-24T03:08:50", "message" : "Call() started"