[java] Regex : je ne m'en sors pas :(

Regex : je ne m'en sors pas :( [java] - Java - Programmation

Marsh Posté le 23-05-2004 à 15:41:14    

je cherche a parser un header de mail, soit :
 

Return-Path: <bibi.bubulle@free.fr>
Delivered-To: online.fr-perchut2@free.fr
blabla...


 
 
je voudrais recuperer par exemple l'adresse qu'il y a dans le return path, donc :
 

Code :
  1. Pattern return_pattern = Pattern.compile("Return-Path:.<(.*@.*)>" );
  2. Matcher return_matcher = return_pattern.matcher("Return-Path: <bibi.bubulle@free.fr>" );
  3. System.out.println("l'adresse de retour est : "+return_matcher.group());


 
et je me mange invariablement  

Citation :


java.lang.IllegalStateException: No match found


 
j'ai essayé toutes les combinaisons possibles, j'ai du oublier un truc...  
please help  [:sisicaivrai]

Reply

Marsh Posté le 23-05-2004 à 15:41:14   

Reply

Marsh Posté le 23-05-2004 à 16:24:59    

doit vraiment y avoir un gros pb :
 
j'ai repris l'exemple de la javadoc :
 

Citation :

Current REGEX is: \bdog\b
Current INPUT is: The dog plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.


 
alors si j'ecris ca :
 
 

Code :
  1. // on declare le pattern
  2.  Pattern return_pattern = Pattern.compile("\bdog\b" );
  3.  // on declare le matcher, avec en entree, le header complet
  4.  Matcher return_matcher = return_pattern.matcher("the dog plays in the yard" );
  5.  System.out.println("l'adresse de retour est : "+return_matcher.group());


 
et je me mange : java.lang.IllegalStateException: No match found
  [:ciler]

Reply

Marsh Posté le 23-05-2004 à 17:48:06    

IDEA + le plugin regex roxxor :o

Reply

Marsh Posté le 23-05-2004 à 19:55:07    

DarkLord a écrit :

IDEA + le plugin regex roxxor :o


merci de lui envoiyer ta clef d'enregistrement par MP [:ojap]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 23-05-2004 à 20:05:45    

T'es au courant que les \ faut les escaper dans les chaînes de caractères ? :o
Donc ton pattern, c'est "\\bdog\\b"
Sinon, merci de suivre les conventions de codage Java, au moins pour tes variables (les _, argl). Vala [:dawa]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 24-05-2004 à 04:06:00    

Taiche a écrit :

T'es au courant que les \ faut les escaper dans les chaînes de caractères ? :o
Donc ton pattern, c'est "\\bdog\\b"
Sinon, merci de suivre les conventions de codage Java, au moins pour tes variables (les _, argl). Vala [:dawa]


 
c'est peut etre pour ca [:meganne]...
 
qu'est ce qu'elles ont mes conventions ? :o
classe : MaClasse
fonction maFonction ?
 
faut faire un truc special pour les variables :??:

Reply

Marsh Posté le 24-05-2004 à 09:09:08    

Pattern return_pattern returnPattern

Reply

Marsh Posté le 24-05-2004 à 10:32:47    

Perchut2 a écrit :


fonction maFonction ?


 
methode maMethode, plutôt.

Reply

Marsh Posté le 24-05-2004 à 12:51:16    

Perchut2 a écrit :


qu'est ce qu'elles ont mes conventions ? :o
classe : MaClasse
fonction maFonction ?
 
faut faire un truc special pour les variables :??:


Ouais, maVariable et pas ma_variable :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 24-05-2004 à 12:59:30    

faudra quand meme qu'on m'explique l'interet des regex pour une connerie comme ça [:meganne]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 24-05-2004 à 12:59:30   

Reply

Marsh Posté le 24-05-2004 à 13:00:40    

the real moins moins a écrit :

faudra quand meme qu'on m'explique l'interet des regex pour une connerie comme ça [:meganne]

être à la mode et donner raison aux "java sapu sarame" ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 13:02:16    

ha, tiens, nraynaud! je me disais aussi.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 24-05-2004 à 13:02:26    

Taiche a écrit :

T'es au courant que les \ faut les escaper dans les chaînes de caractères ? :o
Donc ton pattern, c'est "\\bdog\\b"


 
N'importe nawak :  
 
\b, c'est une coupure de mot, justement.
 
Avec \bdog\b, il va chercher le mot 'dog' -> ne pas reconnaître doggy, par exemple.
 
Avec \\bdog\\b, il va reconnaître "\bdog\`b" : le premier \ escape le second, et donc "\b" perd son méta-sens => le 'b' est reconnu tel quel.
 

Reply

Marsh Posté le 24-05-2004 à 13:03:27    

euh non.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 24-05-2004 à 13:04:00    

nraynaud a écrit :

être à la mode et donner raison aux "java sapu sarame" ?


non, non, mais l'autre solution, c'était d'envoyer un mail à l'adresse avec Javamail, et d'attendre le mail delivery failure...Et c'est long, alors voila... :D

Reply

Marsh Posté le 24-05-2004 à 13:05:15    


+1 avec le non de --


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2004 à 13:05:36    

tiens, en plus c'est faux ce qu'il est en train de faire.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 13:07:01    

gfive a écrit :

N'importe nawak :  
 
\b, c'est une coupure de mot, justement.


Rendors-toi :D
 
Sérieusement, je sais ce que tu veux dire mais là non, spa comme ça que ça marche. Le gars qui veut détecter une tabulation dans une chaîne, il emploiera comme Pattern "\\t" et non "\t" qui sera lui interprété par le compilo comme le caractère de tabulation et n'aura donc aucun effet au runtime. Extrait de la javadoc de Pattern :

Citation :

The string literal "\(hello\)" is illegal and leads to a compile-time error; in order to match the string (hello) the string literal "\\(hello\\)"  must be used.


 
Vala.
 
 
EDIT : ah ba tiens, toujours dans la javadoc, pile poil c'qui nous intéresse et une ligne avant mon quote précédent :

Citation :

The string literal "\b", for example, matches a single backspace character when interpreted as a regular expression, while "\\b" matches a word boundary.


Message édité par Taiche le 24-05-2004 à 13:14:38

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 24-05-2004 à 13:14:20    

Taiche a écrit :

Rendors-toi :D
Sérieusement, je sais ce que tu veux dire mais là non, spa comme ça que ça marche.


 
Je suis perplexe....mais effectivement, je me suis sans doute mis dedans sur ce coup là.
Sinon, pour le problème de Perchut, un RTFM suffit :  

Code :
  1. group
  2. public String group()
  3.     Returns the input subsequence matched by the previous match.


 
donc, si tu as pas appellé 'matches', ben 'group' ne renverra rien, si j'ai tout bien compris (mais bon, on sait jamais.. :D)

Reply

Marsh Posté le 24-05-2004 à 13:15:28    

gfive a écrit :

Je suis perplexe....mais effectivement, je me suis sans doute mis dedans sur ce coup là.


Ba vois mon EDIT, ça flinguera tous tes soupçons :o
Perso j'y ai eu droit donc j'fais gaffe [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 24-05-2004 à 13:22:52    

je suis le seul à n'avoir jamais utilisé les regexes en java ici ?
 
et tout le mond s'en fout que ce garçon est en train de se planter dans ce qu'il veut faire correspondre ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 13:23:24    

C'est quand même un peu capillotracté, je trouve! :) Enfin, sinon, group() renvoie la chaîne complète. Pour avoir le premier 'groupe', après avoir appellé 'matches', il faut appeller "group(1)", ce qui me plonge dans des abîmes d'inconpréhension, mais ça doit être parce que je fais du Perl en ce moment.

Reply

Marsh Posté le 24-05-2004 à 13:24:11    

nraynaud a écrit :

je suis le seul à n'avoir jamais utilisé les regexes en java ici ?


moi j'ai pas encore utilisé celles du jdk1.4. Par contre j'ai déjà utilisé regexp et oro (de jakarta), mais pas pour ce genre de besoin  :sweat:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2004 à 13:26:39    

nraynaud a écrit :

je suis le seul à n'avoir jamais utilisé les regexes en java ici ?


J'en sais rien et à la limite j'm'en fous ; perso j'ai dû le faire 2-3 fois parce que ça me semblait plus facile que d'y aller à grands coups de indexOf pénibles. Maintenat,  "c'est ton choix" :o

nraynaud a écrit :


et tout le mond s'en fout que ce garçon est en train de se planter dans ce qu'il veut faire correspondre ?


Bin vas-y, dis-y comment faire et pis c'est tout. J'le fais pas passke ça me saoûle de parser de la regexp mais si t'as envie te gêne pas :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 24-05-2004 à 13:28:48    

Taiche a écrit :


Bin vas-y, dis-y comment faire et pis c'est tout. J'le fais pas passke ça me saoûle de parser de la regexp mais si t'as envie te gêne pas :o


 
Aggressif, agressif (y'a un ou deux G?? Un affreux doute m'assaille)  
Zen, messieurs, zen! :)  
Il fait beau, la lunditude de la journée est assez pénible en soi pour ne pas en rajouter! :D

Reply

Marsh Posté le 24-05-2004 à 13:30:36    

Taiche a écrit :

Bin vas-y, dis-y comment faire et pis c'est tout. J'le fais pas passke ça me saoûle de parser de la regexp mais si t'as envie te gêne pas :o

nan, mais j'ai au moins un mail dans ma boite qui a :

Citation :

Return-Path: <>


 
et je suis pas sûr que les <> sont obligatoire, mais j'ai la flemme de lire la RFC pour quelqu'un qui a déjà du mal à lire les javadocs.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 13:33:53    

Surtout qu'il y a de merveilleuses API Javamail qui doivent faire tout le boulot.

Reply

Marsh Posté le 24-05-2004 à 13:37:17    

gfive a écrit :

Aggressif, agressif (y'a un ou deux G?? Un affreux doute m'assaille)  
Zen, messieurs, zen! :)  
Il fait beau, la lunditude de la journée est assez pénible en soi pour ne pas en rajouter! :D


T'inquiète, c'est nraynaud, il en a vu d'autres depuis hier :D Pis j'ai mis un :o de bon aloi.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 24-05-2004 à 13:39:53    

surtout que je lui ai pas dit comment faire, vu qu'une regex c'est pas adapté à ce cas.
 
En réalité, je suis toujours à la recherche d'un cas où les regexes sont adaptées.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 13:44:17    

nraynaud : j'en ai un! :D Vérification du format des références de docs peugeot.
Sauf que c'est tellement à la con, que personne a encore réussi à écrire un pattern qui couvre tous les cas particuliers!

Reply

Marsh Posté le 24-05-2004 à 13:46:21    

gfive a écrit :

nraynaud : j'en ai un! :D Vérification du format des références de docs peugeot.
Sauf que c'est tellement à la con, que personne a encore réussi à écrire un pattern qui couvre tous les cas particuliers!

donc il faut utiliser un lexer si c'est trop bordélique. C'est bien plus efficace


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 13:48:06    

bah, en fait, on a décidé qu'ils allaient se démerder avec leur nomenclature débile..... Flemme inside! :D

Reply

Marsh Posté le 24-05-2004 à 14:12:42    

dans mon cas je m'en sers pour permettre pour de la config. ex : mapping d'url


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2004 à 14:23:38    

benou a écrit :

dans mon cas je m'en sers pour permettre pour de la config. ex : mapping d'url

ah oué ?
 
depuis que j'ai vu une alerte sur bugtraq à propos de rewrite, je suis parano par rapport à cette idée.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 14:24:22    

nraynaud a écrit :

depuis que j'ai vu une alerte sur bugtraq à propos de rewrite, je suis parano par rapport à cette idée.


hein ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2004 à 14:27:49    

mod_rewrite
 
le machin d'apache pour changer les URLs, je me trompe de nom peut-être.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-05-2004 à 14:30:21    

nraynaud a écrit :

mod_rewrite
le machin d'apache pour changer les URLs, je me trompe de nom peut-être.


je connais pas bien la config apache ...
dans mon cas ca sert par exemple à associer des produits payants à certaines url (genre un répértoire, un fichier fichier html, etc ...). Ca a l'avantage d'être très flexible ...
Donc c'est juste un test de matching ... rien de bien méchant


Message édité par benou le 24-05-2004 à 14:30:56

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2004 à 14:33:12    

benou a écrit :

je connais pas bien la config apache ...
dans mon cas ca sert par exemple à associer des produits payants à certaines url (genre un répértoire, un fichier fichier html, etc ...). Ca a l'avantage d'être très flexible ...
Donc c'est juste un test de matching ... rien de bien méchant

oué c'est pareil, il expliquaient que pour les répertoires, il faut pas oublier que le / final est optionnel et en tenir compte dans la regex car ils le feront pas pour toi et si tu planques un répertoire avec ça, il y a un risque d'accès quand même.
 
 
C'est pourquoi je suis *pour* les choses sémantiques, c'est plus clair et moins risqué.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 27-05-2004 à 21:25:15    

nraynaud a écrit :

En réalité, je suis toujours à la recherche d'un cas où les regexes sont adaptées.


j'ai bossé sur un moteur d'enrichissement (création de fils) et de correction (modifs de text()) de contenu XML basé sur les regexp. (pour de la publication de documents)
 
ça marchait plutôt bien sans être trop ramant.  
 
le user créait une liste d'actions à opérer sur le fichier XML  
exemple: dans "//p[type='1']" : corriger "[xX][mM][lL]" par "XML" histoire d'unifier et remplacer "java.sun.com" par "<link url='http://java.sun.com'>java.sun.com</link>"
 
on lancait le moteur, je créais mon ensemble de règles (Pattern compilés), les patterns foireux étaient mis dehors, et je parsais le document pour appliquer les actions...
 
c'était bien cool :)
 
je m'étais même amusé à écrire des méthodes de transformations genre toUpperCase(), ...  
 
c'est-y-pas un bel exemple d'application des reg exp ? :o


---------------
A straight line is a special case of a curve. It's a curve which is uncurved. -- Susskind.
Reply

Marsh Posté le 27-05-2004 à 21:34:29    

TBone a écrit :


 
c'est-y-pas un bel exemple d'application des reg exp ? :o

non, par contre, un bel exemple d'utilisation d'un outil genre JLex


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed