yazdıgım kodun mantığı doğru siz uyarlayamadınız sanırım [] icindeki verileri array olarak getiricek.
siz preg_match_all demişsiniz yani belirttiğim koşula uyan birden çok veriyi getir ama "isimler:" sözcüğü 1tane buyüzden kodunuzda 1 sonuç listelior

edit preg_match_all("#(\[([^[]]+)\])+#",$a,$b); [ kapanıs parantezi eklemeyi unutmusum basit bi hataymıs halbuki :)