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);