Regex: Reconnaissance d'un @ au milieu d'une adresse mail
Eno145
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Eno145 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Eno145 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
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);
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
A voir également:
- Regex: Reconnaissance d'un @ au milieu d'une adresse mail
- Regex buddy - Télécharger - Édition & Programmation
- Regex tout sauf - Forum Java
- Regex ne commence pas par ✓ - Forum Programmation
- Regex pour evitez la répétition des caractères - Forum PHP
- Regex mot de passe ✓ - Forum Framework .NET
2 réponses
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
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
Eno145
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
1
Merci
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 :
doit passer ta vérification, et
ne doivent pas passer
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
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