2014-03-25 33 views
0

我试图清理日志文件中的Splunk对其进行分类,所以我的问题是:PCRE正则表达式:如何将lookahead与以下目的结合使用?

^(我?)(?:[^] *){8} (((P. +?)? = \ d {8} \ d {8} \ d {10})|。?。?(= \ d {8}))

粗体区域需要被组合等的if/else,[它选择之前粗线]

我希望它停止之前刚刚8个数字和点(DDDDDDD)OR 8digit_8digit_10digits(8xd_8xd_10xd。)

我的任务就是好摆脱日志文件上的所有唯一编号,我可以更好地对其进行分类。

请帮助

+1

您能提供一个期望的输入和输出示例吗? – CAustin

+0

输入: 时间戳:2/26/2014 4:00:42 PM SN#7消息:ServerXYZ:AppXYZ未能获取响应12345678的活动代码。 时间戳:2/26/2014 3:37:42 PM SN# 31消息:Error复制文件夹,下面的异常被抛出IOException异常:该进程无法访问该文件12345678_12345678_1234567890' 输出:应该是指 AppXYZ未能抢响应 错误复制文件夹活动代码,以下异常被抛出IOException异常:进程无法访问文件 我不希望有唯一的编号字段,我可以执行一些统计信息,例如我的网站上有哪些类型的错误。 – akemko

+0

你究竟在哪里试图从**中捕获**?从正则表达式看起来像'Message:---(停在那些数字)'。这个'(?:[^] * []){8}'不推荐。还有什么是'^'插入符号,线或字符串的开头? – sln

回答

0

你可以只使以前.+懒:

(?i)^(?:[^ ]*){8}(?P<FIELDNAME>.+?)((?=\d{8}_\d{8}_\d{10}\.)|(?=\d{8}\.)) 
           ^

贪婪,它会尽可能从最初的比赛停止。我最后删除了?,因为只要前面有8位数字,它就会停止。另外,您可以实际组合这些lookahead:

(?i)^(?:[^ ]*){8}(?P<FIELDNAME>.+?)(?=\d{8}(?:_\d{8}_\d{10})?\.) 
+0

嘿杰里,感谢您提供100%准确的答案,这是我没有100%准确的问题 - 所以我很抱歉花更多的时间。如何确保它在看到8位数字之前停止。在上面的情况下: AppXYZ未能获取响应12345678的活动代码。 - >成功获取消息 while: 时间戳:2/26/2014 3:31:37 PM ....消息:ServerXYZ2:SendMail:发送错误mail回复ID:12345678 - >它没有工作 我没有包括这一点,因为在8位数字之前停止也包括这个日志以及我不熟悉,JustDoesn'tKnowHowToCombineThoseLookahead.ThanxInAdvance – akemko

+0

我发现它。添加“?”在最后“之后。”还可以启用其他8位数字。上帝,我清理了95%。剩下%5。再次感谢你杰瑞。 – akemko