使用键和值嵌套括号,PHP

时间:2016-03-02 15:37:16

标签: php regex preg-match preg-match-all

我试图将每个嵌套的方括号分成各自的部分,如果有任何子标记或方括号,也会重复出现,例如,我试图转向:

 [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));

1 个答案:

答案 0 :(得分:0)

逐个字符迭代的简单脚本,当它找到开始标记时,它开始在里面记录文本,甚至记录递归的开始和结束括号,并且还没有解析它们,因为代码已经完成了一半。以下是正在更新的代码:

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

这是我在为递归开发它时的行动:

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
  )
)

这是预期的输出。