2016-04-07 240 views
0

你好,我有一個正則表達式的問題。獲得字符串的數組正則表達式正則表達式

例如我有這樣的文字

$textMessage = "|nif|<00/00/03364301P>|lat|<not set>|long|<not set>|deviceId|<1F26DE6896ADC816-001346E604E7>|messageId|<70154>"; 

,我想獲得一個數組這樣

$data = array(
array("nif" => "00/00/03364301P"), 
array("lat" => "not set") // etc 

從字符串中的所有數據,我想這個功能。

function getArrayDataSMS($textMessage){ 
    $regexType = '/\|([a-zA-Z]+)\||<[\d]+>/'; 
    $rowValueData = preg_match_all($regexType, $textMessage, $matches, PREG_SET_ORDER); 

foreach ($matches as $key => $match) { 
    $arrayData[trim($match[1])] = trim($match[2]); 
} 
return $arrayData; 

}

但響應不正確

array(2) { 
[0]=> 
string(5) "|nif|" 
    [1]=> 
    string(3) "nif" 
    } 

array(3) { 
    [0]=> 
    string(6) "<4545>" 
    [1]=> 
    string(0) "" 
    [2]=> 
    string(4) "4545" 
    } 

這方面有任何想法? 。

+1

或只是爆炸了,轉移,由三三兩兩塊,分配的foreach新容器 – Ghost

+2

我不認爲使用正則表達式是這裏的好辦法。 –

+0

你真的想要一個多維數組還是一個簡單的關聯數組? –

回答

2

NON - 正則表達式

$文字信息=「| NIF | < 00/00/03364301P> |經緯度||長|| DEVICEID | < 1F26DE6896ADC816-001346E604E7 > | messageId | < 70154>「;

使用上面的字符串,您可以使用此腳本將其處理成您想要的數組。

$array = explode("|",$textMessage); 
var_dump($array); 

$data = array(); 

//Start with 1 since $array[0] is ''; 
//Assumed first and last characters <> are present and need to be removed 
//Feel free to modify as needed 

for($i = 1; $i < count($array); $i+=2) { 
    $data[] = array($array[$i] => substr($array[$i+1], 1, -1)); 
} 
echo "<pre>"; 
print_r($data); 

輸出

Array (
    [0] => Array (
      [nif] => 00/00/03364301P 
     ) 

    [1] => Array (
      [lat] => not set 
     ) 

    [2] => Array (
      [long] => not set 
     ) 

    [3] => Array (
      [deviceId] => 1F26DE6896ADC816-001346E604E7 
     ) 

    [4] => Array (
      [messageId] => 70154 
     ) 
) 
+1

非常感謝,這很好! –

0

試試這個:

$text = "|nif|<00/00/03364301P>|lat|<not set>|long|<not set>|deviceId|<1F26DE6896ADC816-001346E604E7>|messageId|<70154>"; 
preg_match_all("/\|(\w+?)\|\<(.+?)>/",$text,$a); 
$result = array_combine($a[1],$a[2]); 
相關問題