$tt = "Event: Dial Privilege: call,all SubEvent: Begin Channel: Local/0267@from-queue-2962;2 Destination: SIP/601-00001bca CallerIDNum: 07016317212 CallerIDName: rc07016317212 ConnectedLineNum: 0267 ConnectedLineName: 0267 UniqueID: 1339380988.50590 DestUniqueID: 1339380988.50591 Dialstring: 601";
preg_match("/(CallerIDNum:\s+\d+)\s+.+(UniqueID:\s\d+\.\d+)/",$tt,$out, PREG_OFFSET_CAPTURE,3);希望的结果是
['CallerIDNum'] =〉"07016317212" ;
['CallerIDName'] =>"rc07016317212" ;
['ConnectedLineNum']=>"0267";
['ConnectedLineName']=>"0267";
['UniqueID']=>"1339380988.50590";
[DestUniqueID]=>"1339380988.50591";
类型这样,从那个字符串拆分一个名称对应一个值
preg_match("/(CallerIDNum:\s+\d+)\s+.+(UniqueID:\s\d+\.\d+)/",$tt,$out, PREG_OFFSET_CAPTURE,3);希望的结果是
['CallerIDNum'] =〉"07016317212" ;
['CallerIDName'] =>"rc07016317212" ;
['ConnectedLineNum']=>"0267";
['ConnectedLineName']=>"0267";
['UniqueID']=>"1339380988.50590";
[DestUniqueID]=>"1339380988.50591";
类型这样,从那个字符串拆分一个名称对应一个值
preg_replace('/(\w+):\s+([^\s]+)/e','$ar[$1]="$2"',$tt);//quit();
print_r($ar);
<?php
$str = "Event: Dial Privilege: call,all SubEvent: Begin Channel: Local/0267@from-queue-2962;2 Destination: SIP/601-00001bca CallerIDNum: 07016317212 CallerIDName: rc07016317212 ConnectedLineNum: 0267 ConnectedLineName: 0267 UniqueID: 1339380988.50590 DestUniqueID: 1339380988.50591 Dialstring: 601";
$nmatches = preg_match_all('/(CallerIDNum|CallerIDName|ConnectedLineNum|ConnectedLineName|UniqueID|DestUniqueID|Dialstring): (\S+)/', $str, $matches);
print_r($matches);
?>
[User:root Time:13:15:36 Path:/home/liangdong/php]$ php preg.php
Array
(
[0] => Array
(
[0] => CallerIDNum: 07016317212
[1] => CallerIDName: rc07016317212
[2] => ConnectedLineNum: 0267
[3] => ConnectedLineName: 0267
[4] => UniqueID: 1339380988.50590
[5] => DestUniqueID: 1339380988.50591
[6] => Dialstring: 601
) [1] => Array
(
[0] => CallerIDNum
[1] => CallerIDName
[2] => ConnectedLineNum
[3] => ConnectedLineName
[4] => UniqueID
[5] => DestUniqueID
[6] => Dialstring
) [2] => Array
(
[0] => 07016317212
[1] => rc07016317212
[2] => 0267
[3] => 0267
[4] => 1339380988.50590
[5] => 1339380988.50591
[6] => 601
))
如$tt里某个名称没有值的话,那拆分后,这个名称的值就由变为将下一个名称填充进去,
。比如 这里$tt CallerIDNum和UniqueID它们的值均不存在,这样就会错误$tt = "Event: Dial Privilege: call,all SubEvent: Begin Channel: Local/0267@from-queue-2962;2 Destination: SIP/601-00001bca CallerIDNum: CallerIDName: rc07016317212 ConnectedLineNum: 0267 ConnectedLineName: 0267 UniqueID: DestUniqueID: 1339380988.50591 Dialstring: 601";
array(10) {
["Event"]=> string(4) "Dial"
["Privilege"]=> string(8) "call,all"
["SubEvent"]=> string(5) "Begin"
["Channel"]=> string(28) "Local/0267@from-queue-2962;2"
["Destination"]=> string(16) "SIP/601-00001bca"
["CallerIDNum"]=> string(13) "CallerIDName:" 这里将下个名称填充了["ConnectedLineNum"]=> string(4) "0267"
["ConnectedLineName"]=> string(4) "0267"
["UniqueID"]=> string(13) "DestUniqueID:" 这里将下个名称填充了["Dialstring"]=> string(3) "601" }
?>
preg_match_all('/(\w+):(\s*?[^\s:]+?|\s*?)(?:\s|$)/',$str,$matches);$arr=array_combine($matches[1],$matches[2]);
print_r($arr);