尝试使用Java中的regex从日志文件中获取一些有用的数据

时间:2011-07-14 14:06:46

标签: java regex logging

我在使用正则表达式时遇到了麻烦,因为我只能匹配我的一些目标。

我有一个日志文件,我必须匹配一些项目并写入另一个txt文件。我为我的代码的一个简短例子编写了一个Java代码,但是当我放入整个文件时,一切都搞砸了。

*052511 074217 0065            02242806000      UNKNOWN         U G

*052511 074217 0065    4874    02242806000      UNKNOWN         U A

*052511 074218 0065    4874    02242806000      UNKNOWN         U R

--------   05/25/11   07:42:17   LINE = 0065   STN = 4874    

   CALLING NUMBER   02242806000

   NAME             UNKNOWN        

   UNKNOWN

   BC = SPEECH

00:00:00   INCOMING CALL    RINGING 0:02

00:00:11   CALL RELEASED

我必须从文件中找到这些结果:

  

进来的,05/25 / 11,07:42:17,0065,4874,02242806000,00:00:09,2

在此表达式00:00:09表示[00:00:11-00:00:00]-0:02

对于每个来电和去电,我必须进行上述对话。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

(?xm:
^-------- \s+ (\S+) \s+ (\S+) \s+ LINE\s*=\s*(\d+) \s+ STN\s*=\s*(\d+)
\s+ CALLING\ NUMBER \s+ (\d+) \s*
(?:^(?:[ \t]+.*)?[\n\r]+)* # eat unwanted part

^(\d\d:\d\d:\d\d) \s+ INCOMING\ CALL \s+ RINGING\ ([\d:]+) \s*
(?:^\d.*[\r\n]+)* # possible stuff
^(\d\d:\d\d:\d\d) \s+ CALL\ RELEASED
)

使用捕获组的值来获取结果。您可能需要删除/x相关内容,例如注释和空格。

http://ideone.com/qTBFe

的Perl示例