我有系统日志字符串,如下所示:
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/