非常抱歉我的英语不好。
我有一个字符串,想把它分割成一个数组。 尖括号是多层嵌套的数组。 转义字符应该被保留。
这是一个示例字符串:
$string = '[[["Hello, \"how\" are you?","Good!",,,123]],,"ok"]'
结果结构应该如下所示:
array (
0 =>
array (
0 =>
array (
0 => 'Hello, \"how\" are you?',
1 => 'Good!',
2 => '',
3 => '',
4 => '123',
),
),
1 => '',
2 => 'ok',
)
我已经用以下方式进行了测试:
$pattern = '/[^"\\]*(?:\\.[^"\\]*)*/s';
$return = preg_match_all($pattern, $string, null);
但是这并没有正常工作。我不理解这些正则表达式模式(我在本页面的另一个示例中发现了这个)。 我不知道preg_match_all是否是正确的命令。
希望有人能帮助我。
非常感谢!!!
,(?=,)
替换为''
不能处理引号之间有,,
的情况。我担心唯一的方法是逐个字符解析字符串或尝试将其转换为一个众所周知的格式,如JSON。但这不是一项容易的任务,虽然不是不可能。 - Casimir et Hippolytejson_encode
与,,
问题存在相同的挑战。 - Robin Mackenziejson_decode
- 如果将,,
替换为""
,则此代码将正常工作,例如var_dump(json_decode('[[["Hello, \"how\" are you?","Good!","","",123]],"","ok"]'));
。 - Robin Mackenzie,,
问题:$string = preg_replace('~"[^"\\\\]*+(?s:\\\\.[^"\\\\]*)*+"?(*SKIP)(*F)|,\K(?=[],])|\[\K(?=,)~', '""',$string);
(该代码还处理了[,
或,]
等情况,并避免了引号字符串。) - Casimir et Hippolyte