La función correcta es preg_match(), y debes capturar todo lo que sea número y no al revés.
Es decir, la expresión [^0-9] indica "lo que no sea número" y preg_split() permite convertir dicha cadena en un array dada la expresión como delimitador, lo cual no es el enfoque adecuado.
La idea sería capturar con preg_match() únicamente lo que sea un número: (\d)
Consulta una referencia al respecto.