需要帮助在php中使用preg_split()

时间:2017-05-31 15:47:45

标签: php

任何人都可以解释如何使用preg_split()函数拆分下面提到的字符串

String  [ 

date=2017-05-31 time=14:12:05 devname=FGT3HD3914801291 devid=FGT3HD3914801449 logid=0316013056 type=utm subtype=webfilter eventtype=ftgd_blk level=warning vd="root" policyid=63 sessionid=9389050 user="" srcip=172.30.10.90 srcport=53542 srcintf="port5" dstip=50.7.146.50 dstport=80 dstintf="port2" proto=6 service=HTTP hostname="noblockweb.org" profile="IT ADMIN" action=blocked reqtype=direct url="/wpad.dat?1925450516382f9869bdfee527b429fb23737930" sentbyte=126 rcvdbyte=325 direction=outgoing msg="URL belongs to a denied category in policy" method=domain cat=55 catdesc="Meaningless Content" crscore=10 crlevel=medium

]

我需要以下结构输出 排列 (     [0] =>日期= 2017年5月31日     [1] =>时间= 14:12:05      。      。      。      。     [20] => msg =" URL属于策略中的拒绝类别"      。      。 )

1 个答案:

答案 0 :(得分:0)

preg_split可能不适合这个。您可以更好地使用preg_match_all进行此类拆分。

<?php

    $str = 'date=2017-05-31 time=14:12:05 devname=FGT3HD3914801291 devid=FGT3HD3914801449 logid=0316013056 type=utm subtype=webfilter eventtype=ftgd_blk level=warning vd="root" policyid=63 sessionid=9389050 user="" srcip=172.30.10.90 srcport=53542 srcintf="port5" dstip=50.7.146.50 dstport=80 dstintf="port2" proto=6 service=HTTP hostname="noblockweb.org" profile="IT ADMIN" action=blocked reqtype=direct url="/wpad.dat?1925450516382f9869bdfee527b429fb23737930" sentbyte=126 rcvdbyte=325 direction=outgoing msg="URL belongs to a denied category in policy" method=domain cat=55 catdesc="Meaningless Content" crscore=10 crlevel=medium';

preg_match_all('/ ?(\w+\=(("[^"]*")|([^ ]*)))/',$str,$matches);
print_r($matches[1]);
  • &#39; ?&#39; - 匹配空格字符,它被问号标记为可选,因为它也应与第一个项目匹配。
  • parantheses用于获取匹配的部分,并构建表达式块。第一对paran是我们感兴趣的部分。使用Thatswhy $matches[1]$matches[0]包含整个匹配的部分,以及可能的第一个空格字符。
  • (... | ...) - 条形字符表示其左侧或右侧的部分可以匹配。
  • (&#34; [^&#34;]&#34;) - 这是用于匹配引用的字符串。 [^"]表示匹配所有不是引号的内容&#34;。方括号构建一类匹配字符。如果插入符号^是类中的第一个字符,则表示该类被反转。
  • ([^] *) - 所有不是空格字符的东西,可能是零长度。