Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1151 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  regex (Pattern) : pb synthaxe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

regex (Pattern) : pb synthaxe

n°448521
pilou50
Posté le 04-07-2003 à 11:28:19  profilanswer
 

Bonjour,
 
Je débute dans les regex des pattern et je n'arrive pas à traduire la regle suivante :
"prendre les mots qui commencent par ce mot-préfixe, et qui finissent par ce mot-suffixe, et qui ne contiennent pas ce sous-mot"
 
-----------
J'arrive seulement a traduire :
"prendre les mots qui commencent par ce mot-préfixe, et qui finissent par ce mot-suffixe, et qui ne contiennent pas ce caractère"
 
Pattern p = Pattern.compile("br[^y]*is" );
 
----------------
 
 
Si j'écris :
Pattern p = Pattern.compile("br[^yx]*is" );
 
ca ne marche pas car [^yx] signifie "ne pas prendre y OU x" (alors que je voudrais que ca signifie "ne pas prendre la chaine de caracteres yx"  
 
 
 
Merci pour vos conseils!
 

mood
Publicité
Posté le 04-07-2003 à 11:28:19  profilanswer
 

n°448543
benou
Posté le 04-07-2003 à 11:37:17  profilanswer
 

si je dis pas de conneris, il n'y a pas de négation dans les regexp (sauf exclusion de caractère)...


---------------
ma vie, mon oeuvre - HomePlayer
n°448549
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2003 à 11:39:19  profilanswer
 

et ^(xy)?


---------------
Le Tyran
n°448552
benou
Posté le 04-07-2003 à 11:40:02  profilanswer
 


t'as pas le droit de faire ca je crois ...
mais bon, je connais vraiment pas bien :$


Message édité par benou le 04-07-2003 à 11:40:32

---------------
ma vie, mon oeuvre - HomePlayer
n°448554
pilou50
Posté le 04-07-2003 à 11:41:06  profilanswer
 

benou a écrit :

si je dis pas de conneris, il n'y a pas de négation dans les regexp (sauf exclusion de caractère)...  


 
Argh !  :cry:
Comment je peux faire ?
 (concaténation d'exclusion de caractères ? ...)

n°448558
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2003 à 11:46:37  profilanswer
 

Si Si ça ça marche: [^(xy)]
 
Ce qui donne:

Code :
  1. Pattern p = Pattern.compile("br[^(yx)]*is" );


Message édité par LetoII le 04-07-2003 à 11:47:25

---------------
Le Tyran
n°448560
pilou50
Posté le 04-07-2003 à 11:47:24  profilanswer
 


 

Code :
  1. import java.util.regex.Pattern;
  2. import java.util.regex.Matcher;
  3. class Essai
  4. {
  5. public static void main(String[]args)
  6. {
  7.   Pattern p = Pattern.compile("br[^y]*is" );
  8.   Matcher m = p.matcher("abrebiysxyzxbrebisa" );
  9.   boolean b = m.matches();
  10.   while(m.find())
  11.   {
  12.    System.out.println("P="+m.group());
  13.   }
  14. }
  15. }


 
 
Là, ca affiche "brebis" (une fois).C'est normal.
 
Mais avec  

Code :
  1. Pattern p = Pattern.compile("br[^yx]*is" );


ca affiche également "brebis" (une fois) (car exclusion du caractere y OU x) alors que je voudrais deux fois (exclusion de la chaine yx).
 

n°448561
pilou50
Posté le 04-07-2003 à 11:48:07  profilanswer
 

(désolé si mon exemple est difficile à lire  :ange: )

n°448566
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2003 à 11:50:50  profilanswer
 

pilou50 a écrit :


 

Code :
  1. import java.util.regex.Pattern;
  2. import java.util.regex.Matcher;
  3. class Essai
  4. {
  5. public static void main(String[]args)
  6. {
  7.   Pattern p = Pattern.compile("br[^y]*is" );
  8.   Matcher m = p.matcher("abrebiysxyzxbrebisa" );
  9.   boolean b = m.matches();
  10.   while(m.find())
  11.   {
  12.    System.out.println("P="+m.group());
  13.   }
  14. }
  15. }


 
 
Là, ca affiche "brebis" (une fois).C'est normal.
 
Mais avec  

Code :
  1. Pattern p = Pattern.compile("br[^yx]*is" );


ca affiche également "brebis" (une fois) (car exclusion du caractere y OU x) alors que je voudrais deux fois (exclusion de la chaine yx).
 
 


 
CF ma réponse plus haut


---------------
Le Tyran
n°448584
pilou50
Posté le 04-07-2003 à 12:02:11  profilanswer
 

LetoII a écrit :


 
CF ma réponse plus haut


 
ca ne marche pas .
ca affiche qu'une fois brebis alors que ca devrait l'afficher deux fois.

mood
Publicité
Posté le 04-07-2003 à 12:02:11  profilanswer
 

n°448658
pilou50
Posté le 04-07-2003 à 13:03:58  profilanswer
 

LetoII a écrit :


 
CF ma réponse plus haut


 

Code :
  1. import java.util.regex.Pattern;
  2. import java.util.regex.Matcher;
  3. class Essai
  4. {
  5. public static void main(String[]args)
  6. {
  7.   Pattern p = Pattern.compile("br[^(xy)]*is" );
  8.   Matcher m = p.matcher("abrebyisxyzxbrebisa" );
  9.   boolean b = m.matches();
  10.   while(m.find())
  11.   {
  12.    System.out.println("P="+m.group());
  13.   }
  14. }
  15. }


 
Ca n'affiche qu'une fois "brebis" alors que ce message devrait apparaître deux fois.   :(

n°448666
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2003 à 13:08:58  profilanswer
 

Effectivement ça marche pas, ça ça marche: "br((x[^y])|([^x]))*is"


---------------
Le Tyran
n°448878
phnatomass
Je m'empare de ton esprit !!
Posté le 04-07-2003 à 16:21:40  profilanswer
 

Pour clore le débat je dirais qu'il n'existe pas de moyen en UNE expression regulière de faire un "sauf un mot".
Pour t'en tu peux faire un :
 Pattern p = Pattern.compile("br(.)*is" );  
Ensuite tu recupere l'element du groupe 0 en fait ce qui est autore des parenthese et tu compare à "iy". si c'est faux ta chaine correspond sinon elle ne correspond pas.

n°448886
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2003 à 16:29:11  profilanswer
 

phnatomass a écrit :

Pour clore le débat je dirais qu'il n'existe pas de moyen en UNE expression regulière de faire un "sauf un mot".
Pour t'en tu peux faire un :
 Pattern p = Pattern.compile("br(.)*is" );  
Ensuite tu recupere l'element du groupe 0 en fait ce qui est autore des parenthese et tu compare à "iy". si c'est faux ta chaine correspond sinon elle ne correspond pas.
 


 
 :heink: J'ai donné une solution qui marche en une expression


---------------
Le Tyran
n°448985
benou
Posté le 04-07-2003 à 18:31:47  profilanswer
 

LetoII a écrit :


 :heink: J'ai donné une solution qui marche en une expression


ok, mais si le mot dont tu ne veux pas fait 20 lettres, tu vas e chier :/
 
c'estvraiment trop nul qu'il y ait pas de "not" dans les regexp :/
 


---------------
ma vie, mon oeuvre - HomePlayer
n°449202
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2003 à 23:55:37  profilanswer
 

benou a écrit :


ok, mais si le mot dont tu ne veux pas fait 20 lettres, tu vas e chier :/
 
c'estvraiment trop nul qu'il y ait pas de "not" dans les regexp :/
 
 


 
Pas plus que si tu devais faire l'automate qui corspond à l'expression régulière  [:ddr555]


---------------
Le Tyran
n°449264
benou
Posté le 05-07-2003 à 00:32:29  profilanswer
 

LetoII a écrit :


Pas plus que si tu devais faire l'automate qui corspond à l'expression régulière  [:ddr555]  


n'empeche que c'est nul :o


---------------
ma vie, mon oeuvre - HomePlayer
n°449960
pilou50
Posté le 07-07-2003 à 09:43:07  profilanswer
 

Cette exception est levée quand je mets :
((<[^!])|([^<]))*  (tous les mots sauf ceux qui contiennent "<!" )
 à la place de
[^!]* (tous les mots sauf ceux qui contiennent "!" )
 
 

Code :
  1. Exception in thread "main" java.lang.StackOverflowError
  2.         at java.util.regex.Pattern$Branch.match(Pattern.java:3860)
  3.         at java.util.regex.Pattern$GroupHead.match(Pattern.java:3900)
  4.        at java.util.regex.Pattern$Loop.match(Pattern.java:4028)
  5.         at java.util.regex.Pattern$GroupTail.match(Pattern.java:3959)
  6.         at java.util.regex.Pattern$GroupTail.match(Pattern.java:3959)
  7.         at java.util.regex.Pattern$NotSingle.match(Pattern.java:2956)
  8.         at java.util.regex.Pattern$GroupHead.match(Pattern.java:3900)
  9.         at java.util.regex.Pattern$Branch.match(Pattern.java:3860)

n°450012
darklord
You're welcome
Posté le 07-07-2003 à 11:08:46  profilanswer
 

belle erreur :D


---------------
Just because you feel good does not make you right
n°450015
pilou50
Posté le 07-07-2003 à 11:10:53  profilanswer
 

DarkLord a écrit :

belle erreur :D


 
.. Merci merci...  :sol:  
 
N'empêche...  :(

n°450020
darklord
You're welcome
Posté le 07-07-2003 à 11:15:17  profilanswer
 

pilou50 a écrit :


 
.. Merci merci...  :sol:  
 
N'empêche...  :(  


 
oui :(


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  regex (Pattern) : pb synthaxe

 

Sujets relatifs
Probleme avec les regexRegex et fonctions php
[PHP] recherche de motifs dans une chaîne, regex[mySql]SELECT le dérnier enregistrement inséré! je cherche la synthaxe
Synthaxe de la QUERY qui SELECT le dérnier RECORD d'un FIELD !!!![regex] un cours complet ?
classe Pattern en utilisation internationale. [résoudu]Design Pattern, je cherche un bouquin
Design patternRegex et smileys
Plus de sujets relatifs à : regex (Pattern) : pb synthaxe


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR