我有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)
我还需要regexp做的只是在字段7中给我USERNAME或UNKNOWN,我不想要COMPANY(这是一个AD域名),但我遇到了麻烦。
字段1将是S-1-5-21-2071757552-4033313730-2397045981-3628,2将是0xC94F000,...并且7将是USERNAME或UNKNOWN。
谢谢!
答案 0 :(得分: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();
}
答案 1 :(得分:2)
好吧,我猜你可能会用这样的东西吗?
lwiod\[([0-9]+)\]: (.*)\|(.*)\|LOGON\|STATUS_(.*)\|(.*)\|(.*)\|(?:COMPANY\\)?(UNKNOWN|[^@]+)(?:@)?
从目前的正则表达式来看,似乎COMPANY
是原样,所以我假设相同。否则,我想你可以使用
lwiod\[([0-9]+)\]: (.*)\|(.*)\|LOGON\|STATUS_(.*)\|(.*)\|(.*)\|(?:[^\\]*\\)?(UNKNOWN|[^@]+)(?:@)?
答案 2 :(得分:0)
这将为您提供所需的所有字段。要删除公司,你必须添加更复杂的正则表达式,我现在就开始写。
您可以使用组将其捕获到后引用中:
: ([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|(?:COMPANY\\)?([^|@]+)(?:@COMPANY)?$
这会让你所有的小组都进入后面的参考文献1-7。
backreference \ 7是您没有公司的用户名。