Lo que tienes que hacer es optimizar el uso de las Expresiones regulares q usas ..
En PHP tienes las expresiones regulares compatibles con Perl como preg_match_all() .. Justo uno de los ejemplos que hay hace lo que buscas tan solo con esa función y un buen uso de la expresión regular obtienes un array bidimensinal con toda las conincidencias de tu mascara usada.
http://www.php.net/manual/en/functio...-match-all.php
Un saludo,
Pd: si mal no recuerdo yo mismo te indiqué esto en el anterior mensaje que haces mención....