2

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

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 为 USERNAME 或 UNKNOWN。

谢谢!

4

3 回答 3

2

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

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

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

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

于 2013-08-08T17:31:20.900 回答
2

根据您的语言,只需在管道上拆分并获取最后一个元素。无需为此使用正则表达式!

在 C#.NET 中:

var myString = "lwiod[2469]: S-1-5-21-2071757552-4033313730-2397045981-3628|0xC94F000|LOGON|STATUS_SUCCESS|10.10.19.10|10.10.42.40|COMPANY\USERNAME"
var login = myString.Split('|').Last();
if (login.contains("\"))
{
    login = login.Split('\').Last();
}
于 2013-08-08T17:05:51.587 回答
0

这将为您提供所需的所有字段。要删除公司,您必须添加更复杂的正则表达式,我现在将开始编写。

您可以使用组将其捕获到反向引用中:

: ([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|(?:COMPANY\\)?([^|@]+)(?:@COMPANY)?$

这将使您的所有组进入反向引用 1-7。

反向引用 \7 是您没有公司的用户名。

于 2013-08-08T17:06:54.483 回答