【发布时间】:2019-02-28 22:23:46
【问题描述】:
我正在尝试解析下面的日志文件;但是我有点坚持弄清楚如何用逗号解析它。
NOTICE Failed-Attempt: EAP session timed out, ACSVersion=acs-1.6.0.10-B.153.x86_64, ConfigVersionId=100, UserName=username, NAS-IP-Address=10.10.10.10, Calling-Station-ID=0123.4a56.78b9, NAS-Port-Id=123, AcsSessionID=host/123/321, AuthenticationIdentityStore=AD1, AuthenticationMethod=AuthMethod, SelectedAccessService=Wireless, DetailedInfo=Invalid username or password specified\, Retry is allowed, FailureReason=24421
我尝试了以下解析方法,但它没有返回我想要的结果:(?:[^,]+)
理想的目标是满足以下条件:
NOTICE Failed-Attempt: EAP session timed out
ACSVersion=acs-1.6.0.10-B.153.x86_64
UserName=username
NAS-IP-Address=10.10.10.10
Calling-Station-ID=0123.4a56.78b9
NAS-Port-Id=123
AcsSessionID=host/123/321
AuthenticationIdentityStore=AD1
AuthenticationMethod=AuthMethod
SelectedAccessService=Wireless
DetailedInfo=Invalid username or password specified, Retry is allowed
FailureReason=24421
【问题讨论】:
-
$explodedList = explode(',', $message); -
我认为
preg_split('~(?<!\\\\)(?:\\\\{2})*\K,~', $s)可能适合你。它只匹配那些没有转义的逗号。它支持在未转义的逗号之前任意数量的转义反斜杠。 -
嗨@WiktorStribiżew,是否可以纯粹在正则表达式中做到这一点?
-
您的意思是在
preg_match_all中使用正则表达式吗?试试'~(?:[^\\\\,]|\\\\.)+~s'。注意四个反斜杠。不知道单词边界是否适合你,我暂时删除了它们。 -
嗨@WiktorStribiżew,它似乎抓住了指定和重试regex101.com/r/rYogFv/1之间的逗号