$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";

类型这样,从那个字符串拆分一个名称对应一个值

解决方案 »

  1.   

    $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_replace('/(\w+):\s+([^\s]+)/e','$ar[$1]="$2"',$tt);//quit();
    print_r($ar);
      

  2.   

    [User:root Time:13:15:35 Path:/home/liangdong/php]$ cat preg.php 
    <?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
            ))
      

  3.   


    如$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" } 
    ?>
      

  4.   

    $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";
    preg_match_all('/(\w+):(\s*?[^\s:]+?|\s*?)(?:\s|$)/',$str,$matches);$arr=array_combine($matches[1],$matches[2]);
    print_r($arr);