$re = '/(?ix)^
(?=(?:[^\.]|\.(?!\.)){0,254}$)
(?!(?:^|.*[\.@])(?=[^a-z0-9]+[\.@]))
(?=(?=\w))
(?=.*[a-z0-9].*@)
(?=.{0,64}@)
[\w\-\.]+(?<!\.)@(?=\w)
[\w\-\.]+(?<!\W)\.[a-z]{2,4}$/m';
$str = '///////////////////////////////////////////////////////////////////////
// LES TESTS SUIVANT NE SONT PAS ACCEPTÉS PAR L\'EXPRESSION RÉGULIÈRE //
///////////////////////////////////////////////////////////////////////
// Le "@" ne peut pas être immédiatement précédé ou suivi d\'un point(.)
invalide.@invalide.test
invalide@.invalide.test
// Le "@" peut être suivi uniquement d\'une lettre, d\'un chiffre ou de "_"
invalide@-invalide.test
// L\'extension doit être immédiatement précédée d\'une lettre, d\'un chiffre ou de "_"
valide@valide-.test
// Peut commencer uniquement par une lettre, un chiffre ou "_"
-invalide@invalide.test
// Doit contenir au moins 1 lettre/chiffre entre debut et "." et/ou "@"
___@invalide.test
invalide@___.test
___.invalide@invalide.test
invalide.___.invalide@invalide.test
invalide.___@invalide.test
invalide@___.invalide.test
invalide@invalide.___.invalide.test
// L\'adresse courriel ne peut contenir deux points successifs
invalide@invalide..invalide.test
invalide..invalide@invalide.test
// Peut contenir uniquement des lettres, des chiffres et les caractères "-", "_" et "."
invalide!@invalide.test
in&valide@invalide.test
in!valide@invalide.test
invalide@inv!alide.test
invalide@inv alide.test
inv alide@invalide.test
// L\'extension du domaine contient uniquement des lettres
invalide@invalide.tét
invalide@invalide.t-t
invalide@invalide.t_t
invalide@invalide.t!t
invalide@invalide.t1t
invalide@invalide.123
// Ne peut contenir aucun accent
invalidé@invalide.test
invâlide@invalide.test
invalide@invalidé.test
invalide@invâlide.test
// La longueur de l\'extension du domaine doit être en 2 et 4 caractères inclusivement
invalide@invalide.t
invalide@invalide.testt
// La partie locale (partie avant le "@") ne doit pas être vide
@invalide.test
// La partie locale ne peut avoir plus de 64 caractères
12345678901234567890123456789012345678901234567890123456789012345@invalide.test
// L\'adresse courriel complet ne peut excéder 254 caractères
invalide@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901.test
/////////////////////////////////////////////////////////////////////
// LES ADRESSES SUIVANTES SONT ACCEPTÉS PAR L\'EXPRESSION RÉGULIÈRE //
/////////////////////////////////////////////////////////////////////
1234567890123456789012345678901234567890123456789012345678901234@valide.test
valide@12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012.test
valide@valide.valide.test
valide.valide@valide.test
valide_valide@valide.test
valide-valide@valide.test
valide@valide_valide.test
valide@valide-valide.test
123@valide.test
a@valide.test
valide@a.test
VaLiDe@VaLiDe.TeSt
_valide@valide.test
valide@_valide.test
valide@123.test
valide@valide.tt
valide@valide_.test
valide_@valide.test
valide-@valide.test
v@v.vv';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php