2016-03-02 110 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 
) 
) 

这是预期的输出。