trop gourmand :((

Le
kurtz le pirate
bonjour,

encore des problèmes avec ces opérateurs gourmands. le petit bon de code
est le suivant :

while (<SOURCEFILE>) {
if (/*(.*@.*)*/) {
push @address, $1;
}
}

dans le fichiers, pour les lignes de cette forme je récupère bien les
adresse mail :
*1) *
Supprimer des messages , o˜ le champs *De :* contient
*zala@galleyslaves.com*

*2) *
Supprimer des messages , o˜ le champs *De :* contient
*lddihqks@peoplestream.com*


ps : il y a bien un après contient


mais certaines lignes ont cette forme :

*13) *
Supprimer des messages , o˜ le champs *De :* contient *trio@csmt.com*

pour ce type de ligne je récupère :
<De :* contient *trio@csmt.com>


alors, j'ai essayer /*(.*?@.*)*/, /*(.*@.*?)*/, /*(.*?@.*?)*/,
/*(.*@.*)?*/ mais ça marche pas et je ne comprends pas :((


quelqu'un peut m'expliquer ?


--
klp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
GLudovic66000
Le #146676
On 17 juin, 19:02, kurtz le pirate
bonjour,

encore des problèmes avec ces opérateurs gourmands. le petit bo n de code
est le suivant :

while (<SOURCEFILE>) {
if (/*(.*@.*)*/) {
push @address, $1;
}
}

dans le fichiers, pour les lignes de cette forme je récupère bi en les
adresse mail :
*1) *
Supprimer des messages , o˜ le champs *De :* contient
**

*2) *
Supprimer des messages , o˜ le champs *De :* contient
**
...

ps : il y a bien un n après contient

mais certaines lignes ont cette forme :

*13) *
Supprimer des messages , o˜ le champs *De :* contient * om*

pour ce type de ligne je récupère :

alors, j'ai essayer /*(.*?@.*)*/, /*(.*@.*?)*/, /*(.*?@.*?)*/,
/*(.*@.*)?*/ ... mais ça marche pas et je ne comprends pas :((

quelqu'un peut m'expliquer ?

--
klp


bonsoir,

en effet, la gourmandise est un vilain défaut. je pense qu'il faut se
montrer plus explicite. après un petit surf, je vous propose

*([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4})*

cela semble bien marché mais je ne garantis pas l'efficacité/
optimalité

en espérant vous aider
ludovic

dominix
Le #146675
bonjour,

encore des problèmes avec ces opérateurs gourmands. le petit bon de code
est le suivant :

while (<SOURCEFILE>) {
if (/*(.*@.*)*/) {
push @address, $1;
}
}

dans le fichiers, pour les lignes de cette forme je récupère bien les
adresse mail :
*1) *
Supprimer des messages , o˜ le champs *De :* contient
**

*2) *
Supprimer des messages , o˜ le champs *De :* contient
**
...

ps : il y a bien un n après contient


mais certaines lignes ont cette forme :

*13) *
Supprimer des messages , o˜ le champs *De :* contient **

pour ce type de ligne je récupère :


alors, j'ai essayer /*(.*?@.*)*/, /*(.*@.*?)*/, /*(.*?@.*?)*/,
/*(.*@.*)?*/ ... mais ça marche pas et je ne comprends pas :((


quelqu'un peut m'expliquer ?




pour matcher des adresse email les regex c'est catastrophique.
tu n'aura jamais que de l'à peu prés. Il faut utiliser un module
spécialisé. ou la fameuse regex de Jeffrey Friedl.
http://examples.oreilly.com/regex/email-opt.pl

sous cette condition m{(?>[w.-]+)@w+[.][w.]*}g fonctionne pas trop
mal. mais que garder dans une ligne comme
""
Klaus
Le #146550
On Jun 17, 7:02 pm, kurtz le pirate
dans le fichiers, pour les lignes de cette forme je récupère bien les
adresse mail :


[ ...snip... ]

alors, j'ai essayer /*(.*?@.*)*/, /*(.*@.*?)*/, /*(.*?@.*?)*/,
/*(.*@.*)?*/ ... mais ça marche pas et je ne comprends pas :((


On pourrait essayer le module Regexp::Common::Email::Address

Voir également le message du 01/06/2007 ("Re: Extraire a coup sur une
adresse email") dans fr.comp.lang.perl
http://groups.google.fr/group/fr.comp.lang.perl/msg/fc70872566358fd0

--
Klaus

Stéphane Müller
Le #146429
Bonjour,

Si vous êtes certain du format de vos lignes et si la validité
de l'adresse email ne vous intéresse pas, la regex suivante peut
vous suffire:

/contient.+*(.+@.+)*/s

ou encore plus simplement:

/contient.+*(.+)*/s

Stéphane


"kurtz le pirate" message de news:

bonjour,

encore des problèmes avec ces opérateurs gourmands. le petit
bon de code
est le suivant :

while (<SOURCEFILE>) {
if (/*(.*@.*)*/) {
push @address, $1;
}
}

dans le fichiers, pour les lignes de cette forme je récupère
bien les
adresse mail :
*1) *
Supprimer des messages , o~ le champs *De :* contient
**

*2) *
Supprimer des messages , o~ le champs *De :* contient
**
...

ps : il y a bien un n après contient


mais certaines lignes ont cette forme :

*13) *
Supprimer des messages , o~ le champs *De :* contient
**

pour ce type de ligne je récupère :


alors, j'ai essayer /*(.*?@.*)*/, /*(.*@.*?)*/,
/*(.*?@.*?)*/,
/*(.*@.*)?*/ ... mais ça marche pas et je ne comprends pas
:((


quelqu'un peut m'expliquer ?


--
klp


Jogo
Le #146426
Sur fr.comp.lang.perl, kurtz le pirate disait :

alors, j'ai essayer /*(.*?@.*)*/, /*(.*@.*?)*/, /*(.*?@.*?)*/,
/*(.*@.*)?*/ ... mais ça marche pas et je ne comprends pas :((

quelqu'un peut m'expliquer ?


C'est parce que le non-greedy ne marche que sur ce qui se trouve dans
la regex. C'est pas clair ce que je viens de dire mais /.**(.*@.*)*/
marche.

Une autre solution est d'éliminer ce que tu ne veux pas :
/*([^*]*@[^*]*)*/.

--
Bref : pas de caractères ASCII dans les en-têtes
-+- SP in GNU : ß¡Êñ ©øñf¡gµ®Ê® $Ê$ à®T¡©£Ê$ -+-

kurtz le pirate
Le #146425
In article "Stéphane Müller"
Bonjour,

Si vous êtes certain du format de vos lignes et si la validité
de l'adresse email ne vous intéresse pas, la regex suivante peut
vous suffire:

/contient.+*(.+@.+)*/s

ou encore plus simplement:

/contient.+*(.+)*/s


merci stéphane... mais ton exemple ne retour QUE les adresses mail que
justement je n'arrive pas à récupérer :)



--
klp

kurtz le pirate
Le #146424
In article Jogo
Une autre solution est d'éliminer ce que tu ne veux pas :
/*([^*]*@[^*]*)*/.


ça marche !


merci à tous pour votre aide.
--
klp

Stéphane Müller
Le #146311

merci stéphane... mais ton exemple ne retour QUE les adresses
mail que
justement je n'arrive pas à récupérer :)



Effectivement, j'avais mal lu ton énoncé. Désolé.


Stéphane

Publicité
Poster une réponse
Anonyme