2017-02-09 55 views
0

一直在寻找我创建了一个正则表达式的审查,因为我想看看在那里可以作出改进寻找反馈,正则表达式配置

我有以下日志消息:

2017-02-09T14:12:07.381648+00:00 ATA-CENTER ATA[4844] CEF:0|Microsoft|ATA|1.7.5757.57477|AbnormalBehaviorSuspiciousActivity|Suspicion of identity theft based on abnormal behavior|5|start=2017-02-09T14:07:22.1490000Z app=Kerberos shost=xxx suser=Last Name, First Name msg=text here. cs1Label=url cs1=https://xxx-xxx.xxxx.xxx.xxx/suspiciousActivity/589c7796135ca912ec5b75b0 

这里是我的正则表达式:

.*?\|ATA\|(?<version>.*?)\|(?:\w+)\|(?<alert>.*?)\|(?<severity>.*?)\|(?:.*?)\s\w+=(?<app>.*?)\s\w+=(?<src_host>.*?)\s\w+=(?<user>.*?)\s\w+=(?<msg>.*?).\s.*? 

我想不顾一切达ATA,然后忽略在味精结束期后的一切(在cs1Label开始)。

希望得到任何反馈。

Thx

+0

我建议将这样大的字符串分成较小的部分,然后应用正则表达式。这将使它更易于管理和清洁。 – EngineeredBrain

回答

0

在你的正则表达式中有一个小错误。消息后的点号.将匹配所有内容。如果你真的想匹配一个点,你需要逃避它。 (?:\w+)将匹配每个字符和每个数字。您也可以使用\d来匹配数字。而且,我不会标注捕获组。在我看来,这不会使正则表达式更具可读性。

否则对我来说似乎很好。这是一个带固定点的live demo

+0

thx的答复和演示链接,因为这是非常有益的。我将捕获组标记为Splunk,我需要使用密钥标头创建字段提取。我喜欢这些类型的事件,因为它们具有相同的消息格式。仍在努力处理具有多种格式的日志源的最佳方式,以及如何创建适用于所列内容的正则表达式。你将如何创建一个正则表达式,其中一个变量可以或不可以列出,或一个正则表达式显示所有可能的变量? Thx – user3723206

+1

你可以像下面这样创建一个变量:'(?:(?。*?)\ |)?'。 '(?:)'是一个不匹配的组,后面的'?'使得这个组是可选的。然而,这里的问题是,如果格式在变量之间没有差异,那么很难让一个变量可选并且仍然得到正确的顺序。 –