non mi pare che la preg_split faccia quello che chiedi. Cmq Quando dicevo ripulire intendevo una cosa simile:
Codice PHP:
// l'unico subpattern che ti interessa č quello centrale
preg_match_all("/\\[\\s*(.*?)\\s*\\]/s", $str, $arr);
// questa č un'altra versione
preg_match_all('/(?<=\\[)[^\\]]+/', $str, $arr);