Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带键和值的嵌套括号,PHP_Php_Regex_Preg Match_Preg Match All - Fatal编程技术网

带键和值的嵌套括号,PHP

带键和值的嵌套括号,PHP,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我试图将每个嵌套的方括号分离为各自的部分,如果存在子EST或方括号,也会重复出现,例如,我试图将: [a % 1][b % [a % 2]][c % 3] 进入: 编辑,1 我想我真正想做的是: 转向: 进入如下数组: Array ( [0] => a % 1 [1] => b % [ a % 2 ] [2] => c % 3 ) 使用PHP。但是,我的regExp不起作用:/\[(.*)\]/我知道可能有办法做到这一点,但我不知道怎么做 这是我的代码,它可以

我试图将每个嵌套的方括号分离为各自的部分,如果存在子EST或方括号,也会重复出现,例如,我试图将:

 [a % 1][b % [a % 2]][c % 3]
进入:

编辑,1 我想我真正想做的是:

转向:

进入如下数组:

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

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

在我为递归开发它时,它正在起作用:

编辑,完成 代码已建立,工作如下:

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

这是预期的输出。

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

在我为递归开发它时,它正在起作用:

编辑,完成 代码已建立,工作如下:

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

这是预期的输出。

也许你正在寻找一个lexer,看看这个。我非常希望它能工作,它是用于
CSV
文件,与我的格式有点不同。也许你正在寻找一个lexer,看看这个。我非常希望它能工作,它是用于
CSV
文件,和我的格式有点不同。
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
  )
)