$string = 'cba|q:1,f:awd2,t:3awd,h:gr';
$re = '~(?: ^(\w+)\| ) | (?: (\w+) : (\w+) (?:,|$) )~x';
preg_match_all($re, $string, $m, PREG_SET_ORDER);
var_dump($m);
это будет соответствовать части перед конвейером ("ведущим") и всем парам ключ-значение одновременно. "лидерство" будет в $m[0][1]
, а значения ключа будут в $m[1..x][2] and [3]
. Добавьте некоторую простую постобработку, чтобы преобразовать ее в удобную форму, например:
$lead = $m[0][1];
foreach(array_slice($m, 1) as $p)
$data[$p[2]] = $p[3];
var_dump($lead, $data);