PHP:preg_match_all()-分割数组

PHP:preg_match_all()-分割数组,php,arrays,regex,preg-match,Php,Arrays,Regex,Preg Match,我有以下代码: $str = '{"ok1", "ok2"}, {"ok3", "ok4"}, {"ok5", "ok6"}'; preg_match_all('/"([^"]*)"/', $str, $matches); print_r($matches[1]); 哪个输出: Array([0]=>ok1[1]=>ok2[2]=>ok3[3]=>ok4[4]=>ok5[5]=>ok6) 它工作得很完美,但我想把它做成阵列1、阵列2和阵列3。因此,它将根

我有以下代码:

$str = '{"ok1", "ok2"}, 
        {"ok3", "ok4"}, 
        {"ok5", "ok6"}';

preg_match_all('/"([^"]*)"/', $str, $matches);

print_r($matches[1]);
哪个输出:
Array([0]=>ok1[1]=>ok2[2]=>ok3[3]=>ok4[4]=>ok5[5]=>ok6)

它工作得很完美,但我想把它做成阵列1、阵列2和阵列3。因此,它将根据
{}

i、 e


有点过分了,但您确实可以通过两个正则表达式来实现它(如果这不是某个
JSON
code):


Jan的答案非常好,我只是在这里发布我的答案,作为使用正则表达式处理问题的另一种方式,而不是从他的答案中删除

如果您有这样一个字符串:

$output_array = array();
$str = '{"ok1", "ok2", "ok9", "ok11"}, 
        {"ok3", "ok4"}, 
        {"ok5", "ok6", "ok99"}';
Array
(
    [0] => Array
        (
            [0] => "ok1"
            [1] => "ok2"
            [2] => "ok9"
            [3] => "ok11"
        )

    [1] => Array
        (
            [0] => "ok3"
            [1] => "ok4"
        )

    [2] => Array
        (
            [0] => "ok5"
            [1] => "ok6"
            [2] => "ok99"
        )

)
然后,您可以查找所有大括号集,并将它们存储到一个数组中:

preg_match_all('~\{.*?\}~', $str, $matches);
最后,只需循环遍历每一组大括号并匹配出现在引号中的每一组数据。然后将这些匹配项添加到输出数组中

foreach ($matches[0] AS $set) {
    preg_match_all('~".*?"~', $set, $set_matches);
    $output_array[] = $set_matches[0];
}

print_r($output_array);
这将为您提供如下数组:

$output_array = array();
$str = '{"ok1", "ok2", "ok9", "ok11"}, 
        {"ok3", "ok4"}, 
        {"ok5", "ok6", "ok99"}';
Array
(
    [0] => Array
        (
            [0] => "ok1"
            [1] => "ok2"
            [2] => "ok9"
            [3] => "ok11"
        )

    [1] => Array
        (
            [0] => "ok3"
            [1] => "ok4"
        )

    [2] => Array
        (
            [0] => "ok5"
            [1] => "ok6"
            [2] => "ok99"
        )

)

那不是JSON吗?为什么不使用呢?我从数据库中取出一个结构,我这样写的,我不知道JSON做了同样的顺序。您知道如何使用php或json与上述不同的数组一起工作吗?我尝试了代码,它确实输出了您提到的数组,但当我执行$elements[“value”][0]时,它会输出“ok1ok3ok5”。但是,如果您有一个更好更简单的示例和解决方案,因为我想为每个数组提取信息,那将是一个伟大的人。谢谢你!编辑:很简单,就像你解释的那样,它可以通过两个正则表达式实现:)@J.Doe:请看我更新的答案,所有值现在都在
$result
中。像你这样的人让StackOverFlow变亮了,兄弟,继续吧!谢谢:)@J.Doe:不用担心,很高兴能帮上忙:-)很抱歉回答晚了,但是谢谢你的密码,谢谢你的朋友!