$re = '/(\w+)=(\[.*?]|{.*?}|\S+)(?=\s*,\s*\w+=|$)/m';
$str = 'names=[\'m\',\'c\'], nmodes=2, mus=[[-5.0, -5.0], [5.0, 5.0]], sigmas=[[1.5, 1.5], [2.1, 2.1]], corrcoefs=[[[1.0, -0.7], [-0.7, 1.0]], [[1.0, 0.7], [0.7, 1.0]]], covs=[[[2.25, -1.5749999999999997], [-1.5749999999999997, 2.25]], [[4.41, 3.087], [3.087, 4.41]]], weights=[1.0, 3.0], bounds={\'m\': (-inf, inf), \'c\': (-inf, inf)}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php