将字符串解析为数组(['class':'navigation','id':'navigation'])

时间:2011-02-27 14:39:56

标签: php regex php-5.3

任何人都可以建议一种解析字符串的替代方法:(['class': 'navigation', 'id': 'navigation'])

我以前用过:

if(strpos($match[1], '[') === 0)
{
    $render = array();

    foreach(explode(',', substr($match[1], 1, -1)) as $arr)
    {
        $parts  = explode(':', $arr);

        if(count($parts) == 2)
        {
            $render[substr(trim($parts[0]), 1, -1)] = substr(trim($parts[1]), 1, -1);
        }
        else
        {
            $render[]   = substr(trim($parts[0]), 1, -1);
        }
    }

    $args[] = $render;
}
elseif(strpos($match[1], "'") == 0)
{
    $args[] = substr($match[1], 1, -1);
}

但是,理解这种方法的缺点并不需要很长时间,例如, ['title':'Tom's diary']会使代码完全失败。

能够识别错误的条目并将其遗漏也很好。目前我所做的就是使用|{{([^}]+)}}|来捕捉所有函数,它们看起来像:{{foo}},{{foo('test','best')}}或{{foo([' array':'bar'])}}。如果您有快速解决方案,如果您分享它,我将不胜感激。

2 个答案:

答案 0 :(得分:4)

你的字符串格式似乎离JSON不太远 - 即使它似乎不是真正的JSON (你使用[]而不是{},arround什么似乎是一个对象)

也许您可以更改格式,以便使用JSON?


这样您就可以使用json_encode()json_decode()函数。

当您使用标准格式时,更多人将能够处理您的数据。

答案 1 :(得分:1)

这是一个json字符串,只需使用 json_decode 将其解析为数组。