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 les expressions régulières


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Problème avec les expressions régulières
    Bonjour,

    Comment on code les regex


    Le problème est que je ne sais pas comment faire pour que ma méthode reconnaisse des pattern ayant cette forme t?t? (format PERL) pour qu'elle puisse me renvoyer les lignes adéquates...

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    J'obtiens les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ./Test.java:59: cannot find symbol
    symbol  : method compile(java.util.regex.Pattern)
    location: class java.util.regex.Pattern
            Pattern p = Pattern.compile(pattern);
                               ^
    ./Test.java:60: cannot find symbol
    symbol  : class Matcher
    location: class Test
            Matcher m;
            ^
    2 errors

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Est-ce que tu essaye au moins de trouver la solution à tes erreurs ou tu les poste directement ?
    Je dit ça car cela fait plusieurs fois que tu poste des "erreurs" plutôt évidente où il suffit de lire les messages d'erreurs pour connaître la solution.

    Bon, regarde le message d'erreur suivant :
    Citation Envoyé par Premium
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ./Test.java:59: cannot find symbol
    symbol  : method compile(java.util.regex.Pattern)
    location: class java.util.regex.Pattern
            Pattern p = Pattern.compile(pattern);
    Il dit clairement que le compilateur ne trouve pas, pour la classe Pattern, de méthode compile(Pattern), et c'est normal puisque qu'elle n'existe pas. En effet, il te suffit de regarder la doc de la classe Pattern pour voir qu'elle possède deux méthode compile() : compile(String regex) et compile(String regex, int flags)

    Enfin pour le message :
    Citation Envoyé par Premium
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ./Test.java:60: cannot find symbol
    symbol  : class Matcher
    location: class Test
            Matcher m;
            ^
    2 errors
    il t'est indiqué que le compilateur ne connait pas la classe Matcher, en effet tu as oublié l'import
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.util.regex.Matcher;
    En analysant bien tes messages d'erreur et en utilisant la Javadoc, tu devrais être à même de résoudre nombre de tes problèmes avant de poster .

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    J'ai mis import java.util.*;
    je croyais avec cette facon, on avait toutes les classes de java.util

    Comme il n'existe pas de méthode compile(Pattern) et que la méthode matchers ne prend pas de Pattern, comment est-ce que je fais pour utiliser ce parametre ?

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Premium
    J'ai mis import java.util.*;
    je croyais avec cette facon, on avait toutes les classes de java.util
    C'est une erreur fréquente en effet

    Quand tu fais import java.util.*; ca va importer toutes les classes du packag java.util, mais ca ne va pas importer les classes des sous-packages de java.util, comme par exemple regex.

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par Premium
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Pattern p = Pattern.compile(pattern);
        Matcher m;
        
        for(Iterator<Map.Entry<String, List<Integer>>> i = pairs.iterator(); i.hasNext(); ){
            Map.Entry<String, List<Integer>> e = i.next();
            m = p.matcher(e.getKey());
            if(m.matches()){
            for(Integer num : e.getValue())
                lineNumbers.add(num);
            }
        }
    Comme il n'existe pas de méthode compile(Pattern) et que la méthode matchers ne prend pas de Pattern, comment est-ce que je fais pour utiliser ce parametre ?
    Ben tu l'utilise à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = p.matcher(e.getKey());
    en remplaçant p par pattern. Tu reçoit un Pattern en paramètre, utilise le donc, pourquoi vouloir en créer un autre ?

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par le y@m's
    Ben tu l'utilise à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = p.matcher(e.getKey());
    en remplaçant p par pattern. Tu reçoit un Pattern en paramètre, utilise le donc, pourquoi vouloir en créer un autre ?
    J'ai une dernière question
    Dans la javadoc, j'ai vu qu'il y avait de nombreuses écritures différentes pour les expressions régulières avec des *, des [], des ?,...

    Est-ce qu'il faut faire quelque chose de spécial pour qu'un pattern de ce style t?t? soit reconnu ?

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par Premium
    J'ai une dernière question
    Dans la javadoc, j'ai vu qu'il y avait de nombreuses écritures différentes pour les expressions régulières avec des *, des [], des ?,...

    Est-ce qu'il faut faire quelque chose de spécial pour qu'un pattern de ce style t?t? soit reconnu ?
    Ben, il s'agit de la syntaxe des expressions régulières, la doc de la classe Pattern donne un résumé de l'utilisation des expression régulières, après ça depend de ce que tu veus.
    L'expression régulière "t?t?" veut dire 0 ou 1 't' suivi par 0 ou 1 't', donc les différentes chaines qui correspondent sont :
    • ""
    • "t"
    • "tt"

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par le y@m's
    Ben, il s'agit de la syntaxe des expressions régulières, la doc de la classe Pattern donne un résumé de l'utilisation des expression régulières, après ça depend de ce que tu veus.
    L'expression régulière "t?t?" veut dire 0 ou 1 't' suivi par 0 ou 1 't', donc les différentes chaines qui correspondent sont :
    • ""
    • "t"
    • "tt"
    A ok, je n'ai donc pas à me soucier de l'écriture, la fonction fera les recherches seule.
    Donc si je comprends bien les mots tintin, titi, toutou, tata, tito, tutu ne seront pas reconnu par t?t?
    Je croyais que t?t? signifiait t suivit d'une ou plusieurslettre, t suivit d'une ou plusieurs lettres

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par Premium
    Je croyais que t?t? signifiait t suivit d'une ou plusieurslettre, t suivit d'une ou plusieurs lettres
    non,
    Greedy quantifiers
    X
    ? X, once or not at all
    Citation Envoyé par Premium
    Donc si je comprends bien les mots tintin, titi, toutou, tata, tito, tutu ne seront pas reconnu par t?t?
    exact, pour ça : "t.+t.+" qui veut dire : 't' suivi par n'importe quel caractère (.) au moins une fois (+) suivi de 't' suivi par n'importe quel caractère (.) au moins une fois (+).

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Ce qui est bizarre, c'est que pour l'exo qu'on me demande de faire concernant la recherche de mots "normaux" ou d'expressions régulières, cet exemple t?t? a été donné et il a été précisé expression régulière au format PERL.

    Je ne vois pas l'interet de chercher dans un texte des mots tels que "", "t" ou "tt" les 2 derniers ne seront jamais présent .

    Une expression régulière au format PERL, utilise-t'elle autre chose que des ?

  12. #12
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Je ne connais pas le perl ni s'il possède des expressions régulières particulières, il ne te reste plus qu'à faire une petite recherche sur internet, je pense que tu ne devrais pas avoir trop de mal à trouver.

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

Discussions similaires

  1. Problème avec les expressions régulières
    Par philouelgeek dans le forum Langage
    Réponses: 13
    Dernier message: 16/02/2010, 09h33
  2. [RegEx] problème avec les expression régulières
    Par Medmidou dans le forum Langage
    Réponses: 1
    Dernier message: 02/10/2007, 19h35
  3. Problème avec les expression régulière
    Par fouyou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/07/2007, 19h19
  4. [C#] problème avec les expressions régulières
    Par luimême dans le forum C#
    Réponses: 1
    Dernier message: 13/06/2007, 16h44
  5. [VB.net][vs2005] Problème avec les expressions régulières
    Par zouhib dans le forum Windows Forms
    Réponses: 13
    Dernier message: 22/06/2006, 16h56

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