dai...sono riuscito, senza stravolgere troppo lo script, a correggere l'espressione di partenza:

$expression = "^[_A-Za-z0-9-]+(\.[A-Za-z]+)+@[_A-Za-z-]+(\.[A-Za-z]+)(\.[A-Za-z]+)*$";
In questo modo do doppia possibilità anche prima della @


Grazie comunque a tutti