[英]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.