regex - 条件正则表达式,如何提取匹配的子集?

标签 regex syslog

我有系统日志字符串,如下所示:

lwiod[2469]: S-1-5-21-2071757552-4033313730-2397045981-3628|0xC94F000|LOGON|STATUS_SUCCESS|10.10.19.10|10.10.42.40|COMPANY\USERNAME
lwiod[2469]: S-1-5-21-2071757552-4033313730-2397045981-3628|0xC94F000|LOGON|STATUS_SUCCESS|10.10.19.10|10.10.42.40|USERNAME@COMPANY
lwiod[2469]: S-1-5-21-2071757552-4033313730-2397045981-3628|0xC94F000|LOGON|STATUS_SUCCESS|10.10.19.10|10.10.42.40|UNKNOWN

我有一个正则表达式来捕获我需要的一切,如下所示:

lwiod\[([0-9]+)\]: (.*)\|(.*)\|LOGON\|STATUS_(.*)\|(.*)\|(.*)\|(COMPANY\\.*|.*\@COMPANY|UNKNOWN)

我还需要正则表达式做的是仅在字段 7 中为我提供 USERNAME OR UNKNOWN,我不需要 COMPANY(这是 AD 域名),但我遇到了麻烦。

字段 1 为 S-1-5-21-2071757552-4033313730-2397045981-3628,字段 2 为 0xC94F000,...,字段 7 为用户名或未知。

谢谢!

最佳答案

好吧,我想你可能会使用这样的东西?

lwiod\[([0-9]+)\]: (.*)\|(.*)\|LOGON\|STATUS_(.*)\|(.*)\|(. *)\|(?:公司\\)?(未知|[^@]+)(?:@)?

从您当前的正则表达式来看,COMPANY 似乎是这样,所以我假设是一样的。否则,我想你可以使用

lwiod\[([0-9]+)\]: (.*)\|(.*)\|LOGON\|STATUS_(.*)\|(.*)\|(. *)\|(?:[^\\]*\\)?(未知|[^@]+)(?:@)?

关于regex - 条件正则表达式,如何提取匹配的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131808/

相关文章:

javascript - 用 javascript 解析短代码

regex - 正则表达式匹配管道分隔字符串与管道转义

regex - IBAN 正则表达式设计

Java - 正则表达式 - 用星号替换地址

centos - 如何使用 syslog-ng 在 masge 中欺骗 IP

javascript - 正则表达式使用 javascript 验证 csv 格式的文本字段

logging - 将 Cloud Foundry 流日志重定向到虚拟机

elasticsearch - Logstash-按关键字过滤系统日志

c - LD_PRELOAD-ed open() + __xstat() + syslog() 结果存入 EBADF

crash - 树莓派2崩溃: Internal error oops preempt smp arm