Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_Parsing - Fatal编程技术网

在PHP中解析方括号和嵌套括号

在PHP中解析方括号和嵌套括号,php,regex,parsing,Php,Regex,Parsing,我想请求帮助 我知道这个语法 [86855,[[6615663,"Name 1 [GBR]","Name 2 [RUS]",86855,"2017-01-13T09:30:00.0000000",[[16942762,0,,,,1],[16942763,738,,,,2],[16942869,741,,,,1],[16942870,113,,,,1],[16944801,759,,,1],[16944804,759,,,2],[16943142,740,,,,1],[16943144,743,,

我想请求帮助

我知道这个语法

[86855,[[6615663,"Name 1 [GBR]","Name 2 [RUS]",86855,"2017-01-13T09:30:00.0000000",[[16942762,0,,,,1],[16942763,738,,,,2],[16942869,741,,,,1],[16942870,113,,,,1],[16944801,759,,,1],[16944804,759,,,2],[16943142,740,,,,1],[16943144,743,,,,5],[16943145,744,,,,5]],[[25262023,758],[25259130,748],[25259131,749],[25258578,739]],,,,,80104,194132,-1,-1,0,0,0,0,"Sport","League",6,22,0,null,"10890680"],[6614528,"Name 1 [SRB]","Name 2 [LUX]",86855,"2017-01-13T05:00:00.0000000",[[16939629,741,,,,1],[16939630,113,,,,1],[16939632,759,,,1],[16939634,759,,,2],[16939069,0,,,,1],[16939070,740,,,,1],[16939071,738,,,,2],[16942414,743,,,,5],[16942415,744,,,,5]],[[25257607,748],[25257608,749],[25257609,758],[25253011,739]],,,,,1610,48295,-1,-1,0,0,0,0,"Sport","League",6,22,0,null,"10888520"]],[[25138199,8,,,,"2017-01-13T05:00:00.0000000",,,,0,null,null]]],[]
我想从输出中获取数组。像这样的

[0] => 86855
  [0] =>
     [0] => 6615663
     [1] => "Name 1 [GRB]"
     etc...
  [1] =>
     [0] => 6614528
     [1] => "Name 1 [SRB]"
     etc...
有没有可能通过任何注册来实现这一点。表达式还是解析


谢谢:)

您的数据看起来像一个包含在字符串中的数组。您可以使用
eval
构建数组,但出于安全原因,您需要检查字符串是否仅包含允许的项(即:数值、字符串、空项、null和数组。换句话说,没有可执行代码)以及其格式是否正确

第二次,您需要将“空”值更改为PHP解析器能够识别的值

例如:

$pattern = '~
    (?(DEFINE)                         # tokens definitions
        (?<quoted> " [^"\\\\]*+ (?s:\\\\.[^"\\\\]*)*+ " )
        (?<num> -? \d+ (?: \. \d*)? | \. \d+ )
        (?<item> \g<quoted> | \g<num> | \g<array> | null | \s* )
        (?<itemList> \g<item> (?: \s* , \s* \g<item> )* )
        (?<array> \[ \s* \g<itemList> \s* ] )
    )

    \A \s* \g<itemList> \s* \z         # main pattern
~xi';

if (preg_match($pattern, $str)) {
    $expr = preg_replace('~"[^"\\\\]*+(?s:\\\\.[^"\\\\]*)*+"(*SKIP)(*F)|,\s*(?=,)~S', ',null', $str);
    $expr = '$result=[' . $expr . '];'; 
    eval($expr);
    print_r($result);
} else throw new Exception('Bad format');
$pattern=~
(?(定义)#标记定义
(?“[^”\\\]*+(?s:\\\\.[^”\\\]*)*+))
(?-?\d+(?:\。\d*)?\。\d+)
(?\g |\g |\g | null |\s*)
(?\g(?:\s*,\s*\g)*)
(?\[\s*\g\s*])
)
\A\s*\g\s*\z#主模式
~xi';
如果(预匹配($pattern$str)){
$expr=preg\u replace(“~”[^“\\\\]*+(?s:\\\..^“\\\]*)*+”(*跳过)(*F)\;,\s*(?=,)~s','空',$str);
$expr='$result=['.$expr.];';
评估($expr);
打印(结果);
}else抛出新异常(“错误格式”);

看起来有两个有效的JavaScript数组,那么有没有办法将这些js数组解析为php?您是如何得出查找正则表达式的结论的;既然你自己没有尝试过?为什么不详细说明数据来源?你知道,这看起来非常像一种数据格式,有着广泛存在的解析器。我无法访问现有的解析器,我只得到了输出,这就是问题所在。
json\u decode
应该能让你达到你想要达到的目的,如果不是全部的话。
!正是我所需要的,你帮了我很多:)非常感谢!:)它起作用了。