Pues yo empezaría con un explode() usando el espacio como separador.
Luego, comprobaría el primer caracter de cada pedazo y actuaría según cuál fuera. 
 Código PHP:
    $cadena = "alumno @ciudad *nota";
$pedazos = explode(' ', $cadena);
 
foreach($pedazos as $pedazo) {
 switch ($pedazo{0}) {
  case '@': .....
  case '!': .....
  }
 } 
    
  
Saludos.