2013-05-14 96 views
2

我使用正则表达式如下:神交解析与正则表达式

INT (?:[+-]?(?:[0-9]+)) 
VALUE ([0-9]+) 
SPACE \s* 
DATA .*? 
USERNAME [a-zA-Z0-9._-]+ 
YEAR (?>\d\d){1,2} 
MONTHNUM (?:0?[1-9]|1[0-2]) 
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]) 
HOUR (?:2[0123]|[01]?[0-9]) 
MINUTE (?:[0-5][0-9]) 
SECOND (?:(?:[0-5][0-9]|60)) 
ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE})) 
TIMESTAMP %{YEAR:year}/%{MONTHNUM:monthnum}/%{MONTHDAY:monthday}-%{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second}.%{VALUE:_second} 
MESSAGE %{DATA}ERR_SYSTEM%{DATA} 
PARSE_ERROR %{TIMESTAMP:ts}%{SPACE}%{USERNAME:type1}%{SPACE}%{USERNAME:slave}%{SPACE}%{USERNAME:type2}%{SPACE}[%{USERNAME:fibre1}/USERNAME:fibre2]%{SPACE}%{MESSAGE:message} 

现在我要解析这一行:

2013/05/13-05:19:167.76 INFO ABCD1 gamereporting
[0000000000000000/00000000000000000000] [GameReportingSlaveImpl:0x30bf7699a010] .processReport():对于ID错误 处理报告= 18014398509852207,类型= frostbite_m, 误差= ERR_SYSTEM

我得到的解析后执行以下操作:

type1: INFO 
slave : abcd1 
type2: gamereportin 

现在输入2总是错过了'G'。为什么会发生?

有人可以为上面的行提供正确的正则表达式吗?

+0

我已经给了我所尝试的..pls帮助\ – user2359303 2013-05-14 06:34:51

回答

10

您是使用Grok Debugger

你的Grok模式在哪里?我在你的文章中没有看到它。

我会用类似于下面的内容开始。由于您没有了解如何保存数据,因此您必须在解决问题时添加该数据。

%{DATESTAMP}%{SPACE}%{LOGLEVEL}%{SPACE}%{WORD}%{SPACE}%{WORD}%{SPACE}(?<some_id>\[\d+\/\d+\]) 

使用Grok调试器 - 它会为您节省大量时间。