Любой может предложить альтернативный способ разбора строки: (['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 дневник'] полностью потерпел бы неудачу в коде.
Было бы также неплохо иметь возможность идентифицировать ошибочные записи и пропустить их. На данный момент все, что я делаю, это использую: |{{([^}]+)}}|
, чтобы перехватить все функции, которые выглядят так: {{foo}}, {{foo ('test', 'best')}} или {{foo (['array') : 'бар'])}}. Если у вас есть быстрое решение, я буду признателен, если вы поделитесь им.