[英]Java Regex matching between curly braces
我需要解析一个日志文件并获取时间和相关的函数调用字符串 这在日志文件中存储如下: {"time" : "2012-09-24T03:08:50", "message" : "Call( ) 开始"}
在其他字符串字符之间会有多个记录的时间函数调用,因此我希望使用正则表达式来浏览文件并获取所有这些
我想获取包括大括号在内的整个记录信息
我已经尝试了以下
Pattern logEntry = Pattern.compile("{(.*?)}");
Matcher matchPattern = logEntry.matcher(file);
和
Pattern.compile("{[^{}]*}");
Matcher matchPattern = logEntry.matcher(file);
我不断收到非法重复错误,请帮助! 谢谢。
你需要用 '\\' 转义 '{' & '}'
所以: "{(.*?)}"
变成: "\\\\{(.*?)\\\\}"
你必须先用另一个 '\\' 转义 '\\'
请参阅: http : //www.regular-expressions.info/reference.html以获取需要转义的字符的完整列表...
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"
您应该使用积极的前瞻和后视:
(?<=\{)([^\}]+)(?=\})
regexp 中的 {} 有特殊含义,需要转义。
通常转义是通过在要转义的字符前面加上反斜杠来实现的。 在用方括号定义的字符类中,您不需要这样做
所以像
Pattern.compile("\{[^{}]*\}");
可能更接近你想做的事
这对于非嵌套括号非常适用,但对于像这样的表达式
(sum(x) * 100) / (sum(y) + sum(z))
[az]*[\\{]+([a-zA-Z0-9]+)[\\}]+
有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.