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

时间:2012-09-25 15:25:02

标签: java regex

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

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

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

我试过以下

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

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

我一直收到非法重复错误,请帮忙!感谢。

5 个答案:

答案 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)

你应该使用积极的前瞻和后视:

(?<=\{)([^\}]+)(?=\})
  • (?&lt; = {)匹配所有内容后跟{
  • ([^}] +)匹配任何不包含}
  • 的字符串
  • (?= {)匹配{
  • 之前的所有内容

答案 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))有效。