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.