Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用逗号解析正则表达式_Php_Regex_Pcre - Fatal编程技术网

Php 用逗号解析正则表达式

Php 用逗号解析正则表达式,php,regex,pcre,Php,Regex,Pcre,我正在尝试解析下面的日志文件;然而,我还是有点纠结于如何用逗号解析它 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, AcsSessionI

我正在尝试解析下面的日志文件;然而,我还是有点纠结于如何用逗号解析它

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

您可以匹配除逗号和反斜杠以外的任何1+字符,或者使用

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

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

详细信息

  • (?:
    -启动非捕获组:
    • [^\\,]
      -除
      \
      和逗号以外的任何字符
    • |
      -或
    • \.
      -a
      \
      后跟任何字符,包括换行符(由于
      s
      修饰符)
  • )+
    -结束分组,重复1次或更多次
更有效的正则表达式版本(假设匹配应该以字符开头,而不是空格和逗号):

在PHP中:

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


(?=[^,\s])
正向前瞻要求右边的字符必须是除
和空格以外的任何字符,
[^\\,]*(?:\.[^\\,]*)*
是上述正则表达式的展开等价项。

$exploddelist=explode(',,$message)
我想
preg\u split('~(?Hi@WiktorStribiżew,是否可以纯粹在正则表达式中执行此操作?您的意思是在
preg\u match\u all
中使用正则表达式?请尝试
“~(?:[^\\\,]\124\\\)+~s'
。注意四个反斜杠。不知道单词边界是否适用于你,我暂时删除了它们。嗨@WiktorStribiżew,它似乎捕捉到了指定和重试之间的逗号。谢谢Wiktor,这正是我要找的!