我需要解析一个日志文件并获取时间和相关的函数调用字符串 它存储在日志文件中,如下所示:{" time" :" 2012-09-24T03:08:50"," message" :" Call()已启动"}
在其他字符串字符之间会有多个记录时间函数调用,因此我希望使用正则表达式遍历该文件并获取所有这些
我想获取整个记录的信息,包括大括号
我试过以下
Pattern logEntry = Pattern.compile("{(.*?)}");
Matcher matchPattern = logEntry.matcher(file);
和
Pattern.compile("{[^{}]*}");
Matcher matchPattern = logEntry.matcher(file);
我一直收到非法重复错误,请帮忙!感谢。
答案 0 :(得分:30)
你需要逃避'{'& '}'带'\'
所以:"{(.*?)}"
变为:"\\{(.*?)\\}"
你必须用另一个'\'第一个
来逃避'\'请参阅:http://www.regular-expressions.info/reference.html以获取需要转义的完整字符列表...
答案 1 :(得分:7)
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"
答案 2 :(得分:3)
你应该使用积极的前瞻和后视:
(?<=\{)([^\}]+)(?=\})
答案 3 :(得分:0)
{}具有特殊含义,因此需要进行转义。
通常通过在使用反斜杠转义字符之前实现转义。在使用方括号定义的字符类中,您不需要这样做
类似
Pattern.compile("\{[^{}]*\}");
可能更接近你想做的事情
答案 4 :(得分:0)
这适用于非嵌套括号,但适用于
等表达式 $scope.AddUpdateItem = function (item_id, item_discription, item_quantity, item_unit, item_rate, item_discount) {
var getItemAction = $scope.Action;
if (getItemAction == "Update") {
$scope.AddRecord[key].budget_item_id = item_id;
$scope.AddRecord[key].budget_item_discription = item_discription;
$scope.AddRecord[key].budget_item_quantity = item_quantity;
$scope.AddRecord[key].budget_item_unit = item_unit;
$scope.AddRecord[key].budget_item_rate = item_rate;
$scope.AddRecord[key].budget_item_discount = item_discount;
$scope.divItem = false;
ClearFields();
} else
{
$scope.AddRecord.push({ 'budget_item_id': $scope.item_id, 'budget_item_discription': $scope.item_discription, 'budget_item_quantity': $scope.item_quantity, 'budget_item_unit': $scope.item_unit, 'budget_item_rate': $scope.item_rate, 'budget_item_discount': $scope.item_discount });
ClearFields();
}
}
(sum(x) * 100) / (sum(y) + sum(z))
有效。