$re = '/(?=^(\((?:\w+\h*|(?1)\h*)*+\))$)(\()|(?<!^)\G(?:(\w+)(?=\h*\))|(\w+)|\h*|(\()|(\))(?=\h*[\w(])|(\)))/m';
$str = '(10 AND 20 AND (30 OR (40 AND 50)))
Into
[\'10\', \'AND\', \'20\', \'AND\', [\'30\', \'OR\', [\'40\', \'AND\', \'50\']]]';
$subst = "${2:+[}${3:+'$3'}${4:+'$4', }${5:+[}${6:+], }${7:+]}";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
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