【问题标题】:Nesting brackets with key and value, PHP用键和值嵌套括号,PHP
【发布时间】:2016-06-15 13:38:04
【问题描述】:

我试图将每个嵌套的方括号分成它们自己的部分,并且如果有任何子或方括号也会重复出现,例如,我正在尝试转:

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

【问题讨论】:

  • 也许 lexer 是您正在寻找的东西,请参阅similar question here on SO
  • 尽管我希望它能够正常工作,但它适用于 CSV 文件,与我的格式有点不同。

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


【解决方案1】:

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

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

这是预期的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多