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

Langage Java Discussion :

[REGEX] Pourquoi ça matche pas ?


Sujet :

Langage Java

  1. #1
    Membre habitué 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
    Points : 175
    Points
    175
    Par défaut [REGEX] Pourquoi ça matche pas ?
    Bonjour à tous,

    J'ai le code suivant qui doit retourner le dossier parent au dossier commencant par "test" mais il trouve pas de dossier commencant alors qu'il y en a.

    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
    22
    23
     
    	public boolean testSearcher(File source)	{
     
    		boolean pslSearcher = false;	//declare the returned boolean
    		String modele = "test*";
     
    		File[] dirContent = source.listFiles();	//browse the source folder
    		File f = null;
     
    		for (int i=0; i<dirContent.length; i++) {
    			f = dirContent[i];
    			String r = f.getName();
    			if (Pattern.matches(modele, f.getName()))	{
    				folderContent = f.getParentFile();
    				return true;	
    			}else   if (f.isDirectory())   { 
    				testSearcher= testSearcher(f); 
    				if(testSearcher) return true; 
    			}	
    		}
    		return testSearcher;
    	} 
    }
    Quelqu'un voit une erreur dans mon code car moi je voie plus rien là

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    si ton dossier commence par 'test ' tu pourrais utiliser la méthode startsWith(String prefix) plutôt qu'une regex.

  3. #3
    Membre habitué 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
    Points : 175
    Points
    175
    Par défaut
    c'est aussi une possibilité mais j'aimerais quand même savoir pourquoi ce foutu code marche pas.

    En plus je dev sous Eclipse et j'ai installé le plugin QuickRex avec qui mon pattern matche bien.

  4. #4
    Membre habitué 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
    Points : 175
    Points
    175
    Par défaut
    Effectivement ça marche bien avec StartWith. Je vais modifier mon code comme ca.
    Si quelqu'un a une solution, je suis curieux de savoir pourquoi ca mrche pas
    Merci pour ton conseil alex_mund

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    J'ai utilisé les regex dans une appli voici mon code, il faudra l'adapter à tes besoin

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
      /**
       * Retourne une ArrayList correspondant à la recherche de la regex
       *
       * @param chaine la chaine dans laquelle il faut chercher
       * @param pattern la regex à rechercher
       *
       * @return l'ArrayList
       */
      public static ArrayList splitPattern(String chaine, String pattern) {
        Pattern p = Pattern.compile(pattern);
        ArrayList arResult = new ArrayList();
        Matcher matcher = p.matcher(chaine);
        String[] tbString = p.split(chaine);
        StringTokenizer tok;
        String result;
        /*
        while (matcher.find()) {
          //System.out.println("Trouvé !");
          for (int i = 1; i < tbString.length; i++) {
            //System.out.println("T"+i+" : "+tbString[i]);
            tok = new StringTokenizer(tbString[i], "\"");
            result = (String) tok.nextElement();
     
            if (!arResult.contains(result)) {
              arResult.add(result);
     
              //System.out.println(result);
            }
          }
     
          break;
        }
    D'après ce code la méthode split(chaine) sur le pattern retourne dans un tableau de chaîne les occurences trouvées et la méthode matcher.find() permet de savoir si des occurences ont été trouvées.

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Hoegaarden
    c'est aussi une possibilité mais j'aimerais quand même savoir pourquoi ce foutu code marche pas.

    En plus je dev sous Eclipse et j'ai installé le plugin QuickRex avec qui mon pattern matche bien.
    Je ne connais pas QuickRex, mais tu sembles confondre les expressions régulières et les caractères génériques des Shell... Ce qui est très différents.

    Dans les regexp * signifie "zérp, une ou plusieurs fois l'élément précédent" et le point . signifie n'importe quel élément. Donc .* correspond aux * des shell...

    Ainsi les chaines qui matches "test*" sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tes
    test
    testt
    testtt
    testttt
    ...
    Pour les chaines qui commence par "test" il faut utiliser "test.*"

    a++

Discussions similaires

  1. regexp + fichier html => pourquoi ça match pas?
    Par noobC dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2009, 18h34
  2. [C#]Regex pourquoi ça va pas ?
    Par bilb0t dans le forum C#
    Réponses: 3
    Dernier message: 24/10/2006, 13h34
  3. [Regex] Pourquoi ca matche pas ?
    Par Hoegaarden dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/09/2005, 15h19
  4. [langage] ça ne matche pas ?!
    Par myjuna dans le forum Langage
    Réponses: 4
    Dernier message: 12/03/2004, 11h31
  5. pourquoi je peux pas parler pgplsql ?
    Par blob.b dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/09/2003, 23h22

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