./70> Tu penses vraiment que ton prof veut quelque chose d'aussi compliqué pour l'e-mail?
Ce serait pas mal de comprendre cette chaîne, déjà, comme ça tu pourras voir pourquoi ça ne marche pas. Pour cela je te conseille de te renseigner sur la syntaxe des regexp.
1) [a-z0-9!#$%&'*+/=?^_`{|}~-]+
Alors là entre crochets tu as une liste de caractères permis, avec un tiret '-' pour dire 'entre'. Par exemple a-z = de a à z minuscule. Donc on a a-z, 0-9, et plein de caractères permis ensuite. Le + à la fin signifie qu'il faut 1 ou plus de ces caractères. Des exemples sont donc 'a', 'hello', et des contre-exemples sont ';', car ce caractère n'est pas inclus, donc les caractères cités y apparaissent zéro fois.
2) ensuite (?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
Le (?: c'est pour ne pas avoir de groupe capturant et là on s'en fout, prends-le comme une (. Une expression entre parenthèse est valide si elle correspond totalement au contenu. Par exemple (a[b-z]) signifie qu'il faut avoir un a suivi d'une lettre entre b et z. On peut y appliquer un opérateur, par exemple (a[b-z])+ signifie que ça doit apparaître au moins une fois. Donc 'az' est valable, 'azag' est valable aussi, mais pas '' ou 'xg' car l'expression entre parenthèse apparaît zéro fois.
\. signifie un point, ensuite tu as de nouveau la liste de caractères valides, qui doit se trouver entre 1 et n fois (+). Ainsi, '.a' est valide, mais pas '.' car il y a zéro caractère après le point.
A la fermeture (tout à droite) on a une étoile *, ce qui signifie qu'on doit trouver zéro ou plusieurs occurrences. Ainsi, si on a 'foo' il n'y a pas de point, donc l'expression 2) n'existe pas, et l'expression en 1) correspond. Si on a 'foo.bar' alors 'foo' fait partie de 1) et '.bar' de 2). Dans les deux cas ça correspond.
3) @(?:[a-z0-9]
Il faut ensuite un '@', puis un nom qui commence par une lettre minuscule ou un chiffre, puis:
4) (?:[a-z0-9-]*[a-z0-9])?\.)+
0 à n caractères entre a et z minuscule, ou 0 à 9, ou un tiret, puis se terminer par un caractère. En gros on veut juste éviter que ça ne se termine par un tiret. Après ça il faut y avoir un point, et le tout --- 3) et 4) ensemble, du fait de la parenthèse, peut se répéter à volonté. Donc 'a-.' est invalide, 'a.' est valide, 'a' est invalide, 'a.b-c.d.' est valide.
5) (?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)
Ensuite il faut soit 2 caractères majuscules, soit un nom com/org/etc.
Et voilà, comme ça tu peux faire des tests
