正则表达式用逗号解析

问题描述 投票:1回答:1

我试图解析下面的日志文件;但是我有点卡在弄清楚如何用逗号解析它。

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
php regex pcre
1个回答
1
投票

除了逗号和反斜杠,或者使用任何转义序列,您可以匹配任何1个字符

/(?:[^\\,]|\\.)+/s

在PHP中:

$regex = '~(?:[^\\,]|\\.)+~s';

regex demo

细节

  • (?: - 非捕获组的开始: [^\\,] - 除了\和逗号之外的任何其他字符 | - 或 \\. - 一个\跟随任何字符包括换行符(由于s修饰符)
  • )+ - 小组结束,重复1次或更多次。

一个更有效的正则表达式版本(假设匹配应该以除空格和逗号之外的字符开头):

/(?=[^,\s])[^\\,]*(?:\\.[^\\,]*)*/s

在PHP中:

$regex = '/(?=[^,\s])[^\\\\,]*(?:\\\\.[^\\\\,]*)*/s';

this regex demo

(?=[^,\s])正向前瞻要求右边的字符是任何字符,但是,和空格,[^\\,]*(?:\\.[^\\,]*)*是上面解释的正则表达式的展开等价物。

© www.soinside.com 2019 - 2024. All rights reserved.