2016-03-02 178 views
1

我試圖讓每個嵌套方括號分離到他們自己的部分,也復發,如果有任何sub ests或方括號,例如,我想轉:與鍵和值的嵌套括號,PHP

[a % 1][b % [a % 2]][c % 3] 

分爲:

Array 
(
    [a] => 1 
    [b] => Array 
     (
      [a] => 2 
     ) 
    [c] => 3 
) 

編輯,1

我想我真正想要做的是:

轉到:

[a % 1][b % [a % 2]][c % 3] 

到像這樣的數組:

Array 
(
    [0] => a % 1 
    [1] => b % [ a % 2 ] 
    [2] => c % 3 
) 

使用PHP。但是,我regExp沒有工作:/\[(.*)\]/我知道可能有辦法做到這一點,但我不知道如何。

這裏是我的代碼,它的作品不錯,經常性,但它把第一個例子,分爲:

Array 
(
    [a] => 1 
    [b] => [a%2 
    [c] => 3 
) 

這裏是我的代碼:

function comparse($txt) 
{ 
    $arrg = []; 
    $bracks = "/\[(.*)\]/"; 
    if(preg_match($bracks,$txt)) 
    { 
    preg_match_all($bracks,$txt,$matches); 
    foreach($matches[1] as $match) 
    { 
     $spl = explode("%",$match,2); 
     $arrg[$spl[0]] = comparse($spl[1]); 
    } 
    }else{ 
    $arrg = $txt; 
    } 
    return $arrg; 
} 

print_r(comparse($str)); 
+0

也許一個**詞法分析器**是你在找什麼,看到這個[類似的問題在這裏](http://stackoverflow.com/questions/35426793/parsing-a-string-with-recursive-括號/ 35430032#35430032)。 – Jan

+0

儘管我很喜歡它的工作原理,但它適用於'CSV'文件,它的格式與我的不同。 –

回答

0

由字符迭代字符的簡單腳本當它找到開始標記時,它開始記錄裏面的文本,甚至記錄遞歸的開始和結束括號,並且不會解析它們,直到代碼完成一半。這是因爲它是被更新的代碼:因爲我開發它遞歸

http://js.x10.bz/projects/recursive/recursive.txt

這是在行動:守則fnished

http://js.x10.bz/projects/recursive/recursive.php

編輯,成品

,其工作原理如下:

single value: [a:a] 
recursive value: [a:[a:a]] 
array value: [a:[a:1][b:2]] 

$str = "[a:[a:1][b:2]]"; 
$arr = fromnest($str,"[/./:/./]"); // /./ is the separator marking opening, value indicator and closing brackets 
print_r($arr); 

Output: 
Array(
    "a" => array(
    "a" => 1, 
    "b" => 2 
) 
) 

這是預期的輸出。