我试图将每个嵌套的方括号分成各自的部分,如果有任何子标记或方括号,也会重复出现,例如,我试图转向:
[a % 1][b % [a % 2]][c % 3]
分为:
Array
(
[a] => 1
[b] => Array
(
[a] => 2
)
[c] => 3
)
我想我真正想做的是:
转到:
[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 :(得分: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
)
)
这是预期的输出。