2016-04-07 32 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

またはそれを爆発、シフト、2本ずつチャンク、新しいコンテナ – Ghost

+2

にforeachの割り当てはここで良い方法です。 –

+0

多次元配列か簡単な連想配列が本当に必要ですか? –

答えて

2

NON - 「正規表現

$のTextMessage =を| 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); 

OUTPUT

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]); 
関連する問題