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 :

Problème avec une expression rationnelle.


Sujet :

Collection et Stream Java

  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Problème avec une expression rationnelle.
    Salut!

    En parsant la chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String regEx=new String("le premier PATH est : C:/ProgramFile/Bidon/Azerty/Uiop/fichier.txt" +
    				"le second PATH est: D:/Program/Rien/fichier.txt");
    ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pattern modele=Pattern.compile("([CD]:/)((\\w+/)*)((\\w+)\\.txt)");
    		Matcher moteur=modele.matcher(regEx);
    		while(moteur.find()){
    			System.out.println(moteur.group(0));
    			System.out.println("le lecteur est: "+moteur.group(1));
    			System.out.println("le chemin relatif est: "+moteur.group(2));
    			System.out.println("le nom du fichier est: "+moteur.group(3));
    			System.out.println(moteur.group(4));
    			}
    le résultat est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C:/ProgramFile/Bidon/Azerty/Uiop/fichier.txt
    le lecteur est: C:/
    le chemin relatif est: ProgramFile/Bidon/Azerty/Uiop/
    le nom du fichier est: Uiop/
    fichier.txt
    D:/Program/Rien/c.txt
    le lecteur est: D:/
    le chemin relatif est: Program/Rien/
    le nom du fichier est: Rien/
    c.txt
    .

    Alors que les groupes sont bien indiqués dans l'expression rationnelle:
    groupe 1: ([CD]:/) correspondant au lecteur
    groupe 2: ((\\w+/)*) correspondant au chemin
    groupe 3: ((\\w+)\\.txt) correspondant au fichier

    Ou est l'erreur?

    Merci.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    L'ordre des groupes est celui de leurs apparitions dans l'expression, plus exactement l'ordre d'apparition de la paranthèse ouvrante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ([CD]:/)((\\w+/)*)((\\w+)\\.txt)
    ^       ^^        ^^
    1       23        45
    Il faut donc que tu utilises les groupes 1 2 et 4 et non pas les sous-groupes 3 et 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            while(moteur.find()){
                System.out.println(moteur.group(0));
                System.out.println("le lecteur est: "+moteur.group(1));
                System.out.println("le chemin relatif est: "+moteur.group(2));
                System.out.println("le nom du fichier est: "+moteur.group(4));
            }
    Note : Tu devrais utiliser cette expression qui accepte toute les lettres de lecteurs et de \ comme séparateur de chemin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern modele=Pattern.compile("([A-Za-z]:(/|\\\\))((\\w+(/|\\\\))*)((\\w+)\\.txt)");
    Du coups il faut utiliser les groupes 1 3 et 6...

    a++

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    OK merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche avec une expression rationnelle
    Par romanegr dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 26/01/2008, 20h01
  2. [c# REGEX]Problème avec une expression régulière
    Par mezzo_998 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/11/2007, 13h03
  3. Problème avec une expression régulière ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 1
    Dernier message: 28/04/2007, 18h50
  4. [RegEx] problème avec une expression régulière
    Par sissi25 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 09h12
  5. Problème avec une expression régulière
    Par Darkroro dans le forum Langage
    Réponses: 7
    Dernier message: 09/10/2006, 12h13

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