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 :

Problème expressions régulières


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut Problème expressions régulières
    Salut !
    Je comprend plus rien, j'ai une méthode qui me retourne le premier groupe trouvé lors d'un match d'une expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static String contains(String pattern, String s) {
    		System.out.println(s);
    		Pattern pat = Pattern.compile(pattern);
    		Matcher mat = pat.matcher(s);
    		if (mat.matches()) {
    			System.out.println("match");
    			return (mat.group(mat.groupCount()));
    		} else {
    			System.out.println("don't match");
    			return new String("");
    		}
    	}
    J'ai longtemps cherché avant de poster, pour savoir si je ne me trompai pas dans mon expression, mais je l'ai testée avec RegexSR (super bien fait au passage) et elle fonctionne... Donc ca doit venir du code...
    Voici le texte que je cherche à identifier...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
             ref_count = 0x01 (001);
             entity_id = 0x22 (034);
             tx_seg_cnf_reqd = KAL_FALSE;
             tx_sfn = 0x00 (000);
             nw_bmc_start_sfn = 0x00 (000);
             nw_bmc_repeat_period = 0x00 (000);
             size = 0xa6 (166);
             mui = 0xffffffff (-01);
         }
    Et voici les regex que j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .*entity_id = 0x(\w+)
    .*entity_id = 0x([A-Fa-f0-9]+)
    Elles fonctionnent sous RegexSR mais pas dans mon code (pourtant je protège bien les "\")

    Si vous avez une idée !!
    Merki !
    +++
    Ju

  2. #2
    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
    Ton problème vient du En effet la méthode matches() renvoie True uniquement si tout le texte correspond à l'expression régulière alors que toi tu cherche les sous-chaînes correspondantes. Utilises les méthodes find() et group() (sans paramètre) ce qui te donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static String contains(String pattern, String s) {
         System.out.println(s);
         Matcher mat = Pattern.compile(pattern).matcher(s);
         if (mat.find()) {
              System.out.println("match");
              return mat.find();
         } else {
              System.out.println("don't match");
              return "";
         }
    }

  3. #3
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Deja utilise l'option DOTALL cela devrait aider pour ta pattern sinon la regular expression s'arrete au premier retour chariot en java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern pat = Pattern.compile(pattern, Pattern.DOTALL);
    Sinon ta deuxieme pattern me semble tres bien.

    Juste un conseil moi quand il y a des espaces j'utilises "[ \t]+" au lieu de juste " " cela rend ton expression plus robuste sans changer ta syntaxe.

    [Edit] Effectivement le find peut aider aussi ou alors ajoute .* a la fin de ta pattern. [/Edit]

    Bulbo

  4. #4
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Super !
    Merci beaucoup !!!!!! J'avance tout de suite beaucoup plus vite !!!!
    +++
    Ju

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

Discussions similaires

  1. Problème expression régulière
    Par nono44200 dans le forum Struts 1
    Réponses: 1
    Dernier message: 29/08/2007, 09h38
  2. Problème expressions régulières
    Par cottcott dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 14h29
  3. Réponses: 3
    Dernier message: 20/04/2007, 14h47
  4. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 11h40
  5. [RegEx] problème expression régulière
    Par H-bil dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 15h38

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