Regex: Reconnaissance d'un @ au milieu d'une adresse mail

Fermé
Eno145 Messages postés 8 Date d'inscription samedi 26 février 2022 Statut Membre Dernière intervention 3 mai 2022 - 18 mars 2022 à 15:17
Eno145 Messages postés 8 Date d'inscription samedi 26 février 2022 Statut Membre Dernière intervention 3 mai 2022 - 18 mars 2022 à 19:50
Bonjour,

Je débute en Perl, pour un exercice, je dois trouver un Regex capable d'identifier un format très simple d'une adresse mail c'est-à-dire vérifier uniquement l'existence d'un @ (non précédé ou suivit d'un ".") dans ma ligne de fichier contenant des mails correct et incorrect. Jusqu'ici mon code reconnait le symbole, mais ne supprime pas les @ qui matches en début ou fin de ligne. Donc si une adresse mail (mal écrite) contient un @ au début mon code l'indique comme correct. Exemple: @gb@gmail.com sera repris dans la liste des mails. Savez-vous comment améliorer mon regex? Je ne peux pas utiliser les modules pour cette exercice...Merci.

use strict;
use warnings;
my $file =$ARGV[0];

open (FICHIER, '<', $file)
or die ("Impossible d'ouvrir le fichier $file \n");
print "Il y a bien un \@ dans ces lignes\n";
while ( my $ligne = <FICHIER>) {
chomp ($ligne);
if ($ligne =~ /[a-zA-Z0-9_.\.]+[\w]+@[\w+]+/) {
print "$ligne\n";

}
}


close (FICHIER);

Configuration: Windows / Firefox 98.0

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
18 mars 2022 à 15:56
Bonjour

Il existe des sites pour tester ses regex.
Ici ta regex avec un site dans lequel on peut choisir entre plusieurs moteurs de regex (mais pas perl)

https://regex101.com/r/GlVPzi/1

On voit que l’adresse mail avec un - est rejetée
1
Eno145 Messages postés 8 Date d'inscription samedi 26 février 2022 Statut Membre Dernière intervention 3 mai 2022 1
18 mars 2022 à 19:49
Merci
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 18 mars 2022 à 16:51
Salut Eno145,

Regex capable d'identifier un format très simple d'une adresse mail c'est-à-dire vérifier uniquement l'existence d'un @ (non précédé ou suivit d'un ".")

Une telle vérification est très limitée et ne permet pas de valider une adresse e-mail, mais si c'est ce que l'on te demande, tu dois te limiter à concevoir une Regexp qui ne vérifie que cela (ta Regexp actuelle est trop compliquée et, de plus, ne vérifie pas ce qu'on lui demande de vérifier).

par exemple :

a@a


doit passer ta vérification, et

a.@a
a@.
...


ne doivent pas passer
  • tu dois avoir un ou plusieurs caractères avant
    @ 
    et le caractère juste avant ne peut être un
    .
    et
  • tu dois avoir un ou plusieurs caractères après
    @ 
    et le caractère juste après ne peut être un
    .
    et ...


c'est tout.

Commence par écrire une Regexp qui vérifie ta condition la plus stricte et ne valide que des "adresses" ayant un seul caractère avant et après l’arobase et vérifiant que ce caractère n'est pas un point.

Une fois que tu as fait cela, il sera trivial d'étendre ta Regexp pour qu'elle matche aussi lorsque n'importe quel nombre de caractères additionnels (0 ou plus) se trouvent à gauche et à droite de ceux qui jouxtent l'arobase.

C'est assez simple... je pourrais te donner la Regexp, mais si c'est un exercice, le but est que tu comprennes comment le faire par toi même.

Pour tester et mettre au point les Regexp Perl, je n'ai rien trouvé de mieux que "The Regex Coach" : http://www.weitz.de/regex-coach/. C'est un programme pour Windows, qui supporte les Regexp compatibles Perl.


Dal
1
Eno145 Messages postés 8 Date d'inscription samedi 26 février 2022 Statut Membre Dernière intervention 3 mai 2022 1
Modifié le 18 mars 2022 à 19:54
Merci pour ces explications. je en connaissais pas ce programme.
0