Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图用Java中的正则表达式从日志文件中获取一些有用的数据_Java_Regex_Logging - Fatal编程技术网

试图用Java中的正则表达式从日志文件中获取一些有用的数据

试图用Java中的正则表达式从日志文件中获取一些有用的数据,java,regex,logging,Java,Regex,Logging,我在使用正则表达式时遇到了麻烦,因为我只能实现一些目标 我有一个日志文件,我必须匹配一些项目,并编写另一个txt文件。我为我的代码的一个简短示例编写了一个Java代码,但当我放入整个文件时,一切都变得一团糟 *052511 074217 0065 02242806000 UNKNOWN U G *052511 074217 0065 4874 02242806000 UNKNOWN U A *052511

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

我有一个日志文件,我必须匹配一些项目,并编写另一个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:170065487402242806000,00:00:09,2

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

对于每一个呼入和呼出的电话,我必须进行上面的对话


您可以使用以下正则表达式:

(?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相关的内容,如注释和空格


Perl示例在

的旁注中,如果循环中有类似str+=str2的内容,请使用StringBuilder。日志文件的格式是否非常严格?比如,它的格式会有偏差吗?您是否仅尝试捕获来电记录?日志是否比您的示例更大?我想给你一个解决方案,但在我写任何东西之前,我需要更多的信息。@我在问题中给出了日志文件。这是:我正在尝试接听来电和拨出电话。日志格式重复。我的问题不是关于日志文件,而是关于日志文件。基本上,我想建议您完全放弃regex的想法,因为对于一个简单的问题来说,它是不必要的复杂,在这个问题中,您可以很容易地读入您想要的对象类的值,如果不是用于相关的传入/传出调用,则丢弃数据。您所要查找的是静态位置和上下文中的某些字段,因此使用regex提取动态数据几乎没有必要。谢谢大家。它可以在Perl上运行,但我不能在Java上运行。我应该逐行阅读文件吗?这一行适用于整个文件,而不是逐行,因为您要查找的内容跨越几行。如果它适合内存,请读入该文件并对包含的字符串运行正则表达式。