java - 这将是解析以下日志文​​件的 java 正则表达式

标签 java regex parsing

我需要用java解析日志文件。日志文件包含有关调用事务的信息。我感兴趣的行以及其中的信息在日志行条目示例中以粗体标记。对于以下一个,我需要提取状态和电话号码:

Aug 15 20:35:22 GMT 2012 tropo109.orl.voxeo.net TROPO 138595 0 e467547d3333724bdd52635bbb713e77 1 d607eb64fb3bfbfd273a55f4b121b903 SimpleOutgoingCall[+17877058826/null->+17877260664/null] : [TRANSFER,*+17877260664*]

从这一行我需要获取电话号码和总通话时间。

Aug 15 20:35:22 GMT 2012 tropo109.orl.voxeo.net TROPO 138595 0 e467547d3333724bdd52635bbb713e77 1 d607eb64fb3bfbfd273a55f4b121b903 Logging CDR {"call":{"SipSessionID":"ss_jzto5yd4jruv","SessionID":"e467547d3333724bdd52635bbb713e77","CallID":"d607eb64fb3bfbfd273a55f4b121b903","ParentSessionID":"none","ParentCallID":"none","DateCreated":"Wed, 15 Aug 2012 20:34:14 +0000","DateUpdated":"Wed, 15 Aug 2012 20:34:14 +0000","AccountID":"138595","Called":"+17877260664","Caller":"+17877058826","PhoneNumberSid":"unknown","Disposition":"Script ended","Status":"Success","StartTime":"Wed, 15 Aug 2012 20:34:14 +0000","EndTime":"Wed, 15 Aug 2012 20:35:22 +0000","Duration":"67950","Flags":"out","RecordingDuration":"0","Network":"SIP","Channel":"VOICE","ApplicationId":"392671","ApplicationType":"groovy","ServiceId":"1291899","StartUrl":"http://hosting.tropo.com/138595/www/outboud-web2ivr.groovy","BrowserIP":"10.6.69.109","PPID":"461"}}

因此,一般来说,我需要解析文件并在不同的日志行条目中获取调用状态和持续时间。有什么指点吗?

更新: 我得到了获取第一部分的代码,任何关于如何获取第二部分的指针,并且只有一个编译表达式,可以在日志输入行中找到(电话,状态)或(电话,通话持续时间)?:

private static void matchParts( String aText ){

  Pattern pattern = Pattern.compile("(?:\\[(\\w(\\w)*),(\\+\\d{11})\\])");
  Matcher matcher = pattern.matcher(aText );
  String phone;
      String status;
  while (matcher.find()) {
         System.out.println("phone:" +matcher.group(3) + ", status: "+matcher.group(1) );
  }

}

最佳答案

对于第一个:

private static void matchParts(String line){
   Pattern pattern = Pattern.compile(": \\[(\\w+),\\*(\\+\\d{11})\\*]");
   Matcher matcher = pattern.matcher(line);
   String phone;
   String status;
   while (matcher.find()) {
      System.out.println("phone:" +matcher.group(2) + ", status: "+matcher.group(1) );
   }
}

对于第二个:

private static void matchParts(String line){
   Pattern pattern = Pattern.compile("Called\":\"(\\+\\d{11}).*\"Duration\":\"(\\d+)");
   Matcher matcher = pattern.matcher(line);
   String phone;
   String status;
   while (matcher.find()) {
      System.out.println("phone:" +matcher.group(1) + ", duration: "+matcher.group(2) );
   }
}

我使用这个非常方便的工具:http://www.regexplanet.com/advanced/java/index.html当涉及到查找正则表达式时。

编辑: 如果您正在寻找 1 个正则表达式,它可能是这样的:

Pattern.compile("\\[(\\w+),\\*(\\+\\d{11})\\*].*?Called\":\"(\\+\\d{11}).*?\"Duration\":\"(\\d+)", Pattern.MULTILINE);

关于java - 这将是解析以下日志文​​件的 java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041518/

相关文章:

java - 在 JGroups UDP 配置中我们需要同时使用 FD_SOCK 和 FD_ALL 吗?

java - 使用 swing 的桌面应用程序中的数据库

java - 如何快速处理字符串表达式?

python - 解析像 'ssh://git@gitlab.org.net:3333/org/repo.git' 这样的 git URL 吗?

javascript - 当键名具有数值时,JSON.parse() 是否真的对属性进行排序?

java - 如果常量会阻止使用字符串参数,优化器是否会阻止创建字符串参数?

java - 从另一个类中的对象数组访问单个对象

用于多行匹配的Python正则表达式命名组

javascript - 用标签替换字符(例如 *hi* 到 <p>hi</p>)

javascript - 解析错误 The Keyword import is Reserved (SublimeLinter-contrib-eslint)