Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trop gourmand :((

8 réponses
Avatar
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 \n 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

8 réponses

Avatar
GLudovic66000
On 17 juin, 19:02, kurtz le pirate wrote:
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 :
<De :* contient *

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

Avatar
dominix
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 :
<De :* contient *


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
"" ,

Avatar
Klaus
On Jun 17, 7:02 pm, kurtz le pirate wrote:
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

Avatar
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

Stéphane


"kurtz le pirate" a écrit dans le
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 :
<De :* contient *


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


quelqu'un peut m'expliquer ?


--
klp


Avatar
Jogo
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¡©£Ê$ -+-

Avatar
kurtz le pirate
In article <f561vf$l1q$,
"Stéphane Müller" wrote:

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

Avatar
kurtz le pirate
In article ,
Jogo wrote:

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


ça marche !


merci à tous pour votre aide.
--
klp

Avatar
Stéphane Müller

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