Regex 正则表达式将用户ID与逗号';s

Regex 正则表达式将用户ID与逗号';s,regex,Regex,我正在将用户ID与正则表达式(在Splunk中)匹配,并遇到了混合结果: Regex^[^=\n]* Splunk提取^[^=\n]*=(?p[^]+) 规则/测试数据 firstname.lastname A123456 域名\firstname.lastname 域名\A123456 姓 姓,名首字母 日志样本 2019年10月3日23:33:00 wc1 authmgr[4111]:用户身份验证成功:username=lastname,firstname MAC=d0:c6:25:7

我正在将用户ID与正则表达式(在Splunk中)匹配,并遇到了混合结果:

Regex
^[^=\n]*

Splunk提取
^[^=\n]*=(?p[^]+)

规则/测试数据

  • firstname.lastname
  • A123456
  • 域名\firstname.lastname
  • 域名\A123456
  • 姓,名首字母
日志样本

2019年10月3日23:33:00 wc1 authmgr[4111]:用户身份验证成功:username=lastname,firstname MAC=d0:c6:25:79:e7:c6 IP=192.168.16.26角色=Authenticated VLAN=600 AP=43:4a:e3:c9:ec:0c SSID=corpnet AAA profile=aaaprof auth method=802.1x auth server=authserv

2019年10月3日22:42:27 wc1-authmgr[4111]:用户身份验证成功:用户名=lastname,firstname初始MAC=b2:09:cf:4c:80:1e IP=192.168.16.27角色=Authenticated VLAN=600 AP=34:fc:b2:c1:be:dc SSID=corpnet AAA profile=aaaprof auth method=802.1x auth server=authserv

预期的

username=lastname,firstname

username=lastname,firstname首字母


匹配项在regex.com上可用,但在Splunk中,
lastname,firstname
不匹配。似乎当前的正则表达式在逗号处停止。

您的正则表达式在一个地方工作而在另一个地方不工作的原因可能是由于和Splunk中使用了不同的正则表达式风格/引擎

以下正则表达式应该适用于您的用例:
^[^=]*=([^=]*)(?=\s)

但是,用户名不能包含等号,正则表达式才能工作。这可以通过将用户输入清理为字母数字加上指定的特殊字符(“.”、“\”、空格)等来实现

const logEntries=`Oct 3 23:33:00 2019 wc1 authmgr[4111]:用户身份验证成功:username=lastname,firstname MAC=d0:c6:25:79:e7:c6 IP=192.168.16.26角色=Authenticated VLAN=600 AP=43:4a:e3:c9:ec:0c SSID=corpnet AAA profile=aaaprof auth method=802.1x auth server=authserv
2019年10月3日22:42:27 wc1 authmgr[4111]:用户身份验证成功:用户名=姓氏,姓氏首字母MAC=b2:09:cf:4c:80:1e IP=192.168.16.27角色=已验证的VLAN=600 AP=34:fc:b2:c1:be:dc SSID=corpnet AAA配置文件=aaaprof身份验证方法=802.1x身份验证服务器=authserv`;
让结果;
logEntries.split(/\n/).map((条目)=>{
结果=条目。匹配(/^[^=]*=([^=]*)(?=\s)/);
如果(结果){
console.log(结果[1]);
}

});您的正则表达式在一个地方工作而不在另一个地方工作的原因可能是由于和Splunk中使用了不同的正则表达式风格/引擎

以下正则表达式应该适用于您的用例:
^[^=]*=([^=]*)(?=\s)

但是,用户名不能包含等号,正则表达式才能工作。这可以通过将用户输入清理为字母数字加上指定的特殊字符(“.”、“\”、空格)等来实现

const logEntries=`Oct 3 23:33:00 2019 wc1 authmgr[4111]:用户身份验证成功:username=lastname,firstname MAC=d0:c6:25:79:e7:c6 IP=192.168.16.26角色=Authenticated VLAN=600 AP=43:4a:e3:c9:ec:0c SSID=corpnet AAA profile=aaaprof auth method=802.1x auth server=authserv
2019年10月3日22:42:27 wc1 authmgr[4111]:用户身份验证成功:用户名=姓氏,姓氏首字母MAC=b2:09:cf:4c:80:1e IP=192.168.16.27角色=已验证的VLAN=600 AP=34:fc:b2:c1:be:dc SSID=corpnet AAA配置文件=aaaprof身份验证方法=802.1x身份验证服务器=authserv`;
让结果;
logEntries.split(/\n/).map((条目)=>{
结果=条目。匹配(/^[^=]*=([^=]*)(?=\s)/);
如果(结果){
console.log(结果[1]);
}

});我不太清楚您的需求,但这就是您想要的:

(\w+)=(.+?)(?=\s\w+=|$)

我不太清楚您的需求,但这就是您想要的:

(\w+)=(.+?)(?=\s\w+=|$)


如果没有示例数据,很难提供帮助。您的代码看起来应该是“
name=value
”,但没有一个测试数据需要。请您的问题给出实际示例输入数据和预期输出数据。我们需要一个。它不停在逗号处,它停在第一个空格处(在
lastname,
之后)抱歉,是的,没错。如果没有示例数据,很难提供帮助。您的代码看起来应该是“
name=value
”,但没有一个测试数据需要。请您的问题给出实际示例输入数据和预期输出数据。我们需要一个。它不会在逗号处停止,它会在第一个空格处停止(在
lastname,
之后)抱歉,是的,没错。即使是你的演示也可以正常工作,并且看起来是正确的,在Splunk中,它会在第一个空格(lastname之后)处停止。@pablo808:maybe-Splunk不支持向前看。尝试一下
(\w+)=(.+?)(\s |$)
(\w+)=(.+?)(?:\s |$)
没有乐趣。我想你可能是对的。无论如何,谢谢你的帮助。非常感谢。@pablo808:是否有一些错误日志或类似的日志可以解释它为什么不起作用?即使是您的演示也可以正常工作,在Splunk中,在第一个空格(lastname之后,)后停止。@pablo808:可能是Splunk不支持向前看。尝试一下
(\w+)=(.+?)(\s |$)
(\w+)=(.+?)(?:\s |$)
没有乐趣。我想你可能是对的。无论如何,谢谢你的帮助。非常感谢。@pablo808:是否有一些错误日志或类似的日志可以解释它为什么不起作用?谢谢。我在Splunk中也尝试过这个方法,但同样的情况是,在第一个空格(lastname,)之后停止。你的演示看起来是正确的…@pablo808“lastname”后面的字符可能不是空格吗?尝试将日志中的文本直接粘贴到显示不可打印字符的工具中:空格字符将由代码“0x20”表示。谢谢。我在Splunk中也尝试过这个方法,但同样的情况是,在第一个空格(lastname,)之后停止。你的演示看起来很正确,但是…@pablo808可能是“l”后面的字符吗