2017-05-31 187 views
-1

任何人都可以解釋如何使用使preg_split()函數來分割下面提到串需要幫助在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屬於在策略拒絕類別」 。。。。 )

回答

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]); 
  • '?' - 匹配一個空格字符,它被標記爲可選的問號,因爲它也應該匹配第一個項目。
  • 有沒有找到匹配的部分,他們建立表達式塊。這第一對paran是圍繞我們感興趣的部分。這就是爲什麼$matches[1]被使用。 $matches[0]包含整個匹配的部分,以及可能的第一個空格字符。
  • (... | ...) - 條形字符意味着它的左邊或右邊的部分可以匹配。
  • (「[^」]「) - 用於匹配引用的字符串。[^"]表示匹配所有不是引號的內容。方括號構建了一組匹配字符。如果脫字號是班級中的第一個字符,則表示該班級是倒立的。
  • ([^] *) - 所有東西都不是可能爲零的空格字符。
+0

謝謝........ – jani