Ciao, devi ricordarti di mettere il carattere \ di escape ai caratteri speciali (. * ? {} () [] + ^ $ | \). Quando vuoi usare uno di questi caratteri per il loro valore letterario e non, per esempio, per indicare con il + che vuoi almeno uno dei caratteri che hai specificato, devi farli precedere da \.
Quindi nel tuo caso prova a usare questa espressione regolare
Codice PHP:
preg_match('/^[A-Za-z0-9-_.+%]+@[A-Za-z0-9-.]+\.[A-Za-z]{2,5}$/'$email
Spero di esserti stata di aiuto