IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Regex]Match d'une regexp avec une chaîne avec caractères spéciaux


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 14
    Points
    14
    Par défaut [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Bonjour tous,

    J'essaie de faire matcher une regexp avec un String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    boolean condition = Pattern.matches("x*yz*", "xxxyzzz");
    if(condition) System.out.println("YES"); else System.out.println("NO");
    Ceci affiche (évidemment) YES

    Première chose, pourriez-vous me dire pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    boolean condition = Pattern.matches("x*y*z", "xxxyzzz");
    if(condition) System.out.println("YES"); else System.out.println("NO");
    Affiche NO???

    Deuxième chose, pourriez-vous me dire pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    boolean condition = Pattern.matches("*z", "xxxyzzz");
    if(condition) System.out.println("YES"); else System.out.println("NO");
    balance une: Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0.
    Cette exception semble survenir à chaque fois qu'on commence une regexp par " * " !!!

    Dernière chose: la chaîne que je compare doit contenir des caractères spéciaux:
    Ceci posera-t-il problème d'après-vous?

    Merci beaucoup!!![/code]

  2. #2
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    "*" veut dire que le caractère qui la précède peut être répété 0 à n fois
    ça répond à tes 2 premières questions ;-)

    Pour les caractères spéciaux non, ça ne devrait pas poser de problèmes (tu entends quoi exactement par caractères spéciaux?)

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Une expression rationnelle est différente du globing:
    en globing le * sert a matcher 0 ou n caractere.
    pour une expression rationnelle le * sert à indique que le caractère (goupe,...) précédent sera répété 0 ou n fois.

    Aussi pour ton premier exemple il renvoi NO car ton expression précise qu'il veut matcher n fois x, n fois y et une fois z.
    pour ton deuxieme exemple il renvois une exception car le * ne s'applique a rien comme je l'ai dis avant il s'attend a avoir un caractère juste avant pour savoir ce qui doit etre repeté 0 ou une fois.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    hum je suis en retard moi...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Merci... Je lisais ça comme des wildcards d'un shell...

    J'exprime alors "une séquence de n caractères quelconques, y compris le : et le @ et le ."
    de cette facon:

    Merci!!!

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    avec . qui correspond a n'importe quel char
    donc tu fais: .*

  7. #7
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    si je me rapelle bien...
    Le "." correspond à n'importe quel caractère

  8. #8
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    cette fois c'est moi

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Ouais, plus correct que ma proposition... Sauf si on veut mentionner QUELS caractères sont présents das la suite...

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Parcontre fait attention, par defaut le . ne match pas les "line terminator". Il faut que tu mettes un flag dans ton pattern "DOTALL" .

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Qu'est ce que tu veux matcher comme expression ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Je matche des URI SIP...
    Mais là c'est bon, le tout simple ".*" me rend exactement le service nécessaire.

    Je vous remercie beaucoup.
    Cette communauté est vraiment terrible, franchement

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    je pense qu'une expression comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pattern.matcher("sip:([^:]|\\:)+(:([^@]|\\@)+)?@([\\w]{1,64}\\.)+([\\w]{1,64})", URI_SIP);
    est encore mieu adapté (A tester)

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 14
    Points
    14
    Par défaut


    Hé bien!!! J'essaierai!!!

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo