has intentado comprobar que
preg_match() falla individualmente??
porque todo parece una lógica cruzada, osea... que al no usar bien los paréntesis erra tu lógica...
vamos, una expresión simple no falla tan sencillo... obviamente tienes problemas en tus comparaciones...