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] Problème de match...


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Hoegaarden
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 362
    Par défaut [Regex] Problème de match...
    Bonjour à tous.

    Je voudrais récupérer les trois premieres lettres ou chiffres d'un nom de fichier. Voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public String SearchFiles()	{
     
    		FileFilter fileFilter = new FileFilter() {
                public boolean accept(File file) {
                	String nameFile = file.getName();
                	return nameFile.endsWith(".txt");
                }
    		};
    		String result = "";
    		String modele = "^\\w{3}";
    		Pattern pattern = Pattern.compile(modele);
    		File source = new File("C:\\Test");
    		File[] dirContent = source.listFiles(fileFilter);
    		File f = null;
    		for (int i=0; i<dirContent.length; i++) {
    			f = dirContent[i];
    			Matcher matcher = pattern.matcher(f.getName());
    			result = matcher.group();
    		}
    		return result;
    	}
    Bien sur il me retourne une erreur car pour lui rien ne match.
    Ce que je ne comprends pas c'est que j'utilise le plug'in QuickREX pour eclipse et qu'avec mon pattern et ma chaine cela fonctionne.

    Quelqu'un aurait-il une idée ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    matcher.group(); récupère un groupe. Tu n'as aucun groupe dans ton expression régulière.

    Ca devrait marcher si tu fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String modele = "^(\\w{3})";
    Par contre ça sera peut-être pas le premier groupe récupéré car le premier groupe est, si je ne me trompe pas, la chaîne complète.

  3. #3
    Membre éclairé Avatar de Hoegaarden
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 362
    Par défaut
    Merci Natha
    En fait je me suis rendu compte d'un truc que je ne savais pas (dis moi si je me trompe).

    Ce que je tente de faire ne renvoie rien car il faut qu'il y ait au moins un groupe dans lequel la chaine complète est présente, je m'explique.

    Par exemple avec cette regex "^(\\w{3})" et une chaine "ONU Organistaion des Nations Unies"
    Cela ne retourne rien.

    Par contre : "^(\\w{3}).*" et une chaine "ONU Organistaion des Nations Unies"
    Alors là il matche et si je veux récupérer juste ONU je prends le group(1).

    Dans mon deuxième exemple le group(0) correspond à la chaine complete et comme dans le premier aucun groupe ne correspond à la chaine complète, ca plante.

    Est ce à peu près ça ?

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Sûrement oui

  5. #5
    Membre éclairé Avatar de Hoegaarden
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 362
    Par défaut
    Encore merci

  6. #6
    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,


    Quelques remarques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
             Matcher matcher = pattern.matcher(f.getName());
             result = matcher.group();
    Ceci ne peut pas marcher et provoquera une exception dans tous les cas : la méthode group() ne peut être utilisé qu'après un appel réussi à find()...
    Cela donnerai donc plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Matcher matcher = pattern.matcher(f.getName());
            if (matcher.find()) {
                result = matcher.group();
            }
    Citation Envoyé par natha
    matcher.group(); récupère un groupe. Tu n'as aucun groupe dans ton expression régulière.
    group() correspond à group(0) qui représente toutes ton expression...
    Par contre tu peux bien entendu utilisé des parenthèses pour des sous-groupes que tu récupère avec group(1), group(2), etc...



    Enfin je n'ai pas compris ce quie tu voulais faire...
    Si tu dois récupérer les 3 premiers caractères un simple substring(0,3) devrait amplement suffire...

    a++

  7. #7
    Membre éclairé Avatar de Hoegaarden
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 362
    Par défaut
    Merci pour tes précisoins adiGuba et c'est vrai qu'un substring marche très bien aussi mais je n'y avais pas pensé.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 04/09/2006, 17h59
  2. Problème recherche match.. against
    Par pierre_pogo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/08/2006, 10h45
  3. Problème avec MATCH - FULLTEXT
    Par Kosti dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/01/2006, 01h20
  4. [REGEX] Pourquoi ça matche pas ?
    Par Hoegaarden dans le forum Langage
    Réponses: 5
    Dernier message: 02/01/2006, 18h47
  5. [Regex] Pourquoi ca matche pas ?
    Par Hoegaarden dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/09/2005, 15h19

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