我正在尝试解析下面的日志文件;但是我有点想弄清楚如何用逗号解析它。
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
答案 0 :(得分:1)
您可以匹配除逗号和反斜杠以外的任意1个以上的字符,或使用
/(?:[^\\,]|\\.)+/s
在PHP中:
$regex = '~(?:[^\\,]|\\.)+~s';
请参见regex demo。
详细信息
(?:
-一个非捕获组的开始:
[^\\,]
-除\
和逗号之外的任何字符|
-或\\.
-一个\
,后跟任何包含换行符的字符(由于s
修饰符))+
-组结束,重复1次或更多次。更有效的regex版本(假设匹配应以空格和逗号以外的其他字符开头):
/(?=[^,\s])[^\\,]*(?:\\.[^\\,]*)*/s
在PHP中:
$regex = '/(?=[^,\s])[^\\\\,]*(?:\\\\.[^\\\\,]*)*/s';
(?=[^,\s])
正向查找要求将char右边的字符设为,
和空格之外的任何char,并且[^\\,]*(?:\\.[^\\,]*)*
是上述正则表达式的展开等价物。