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 :

correcte Expression Régulière


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut correcte Expression Régulière
    Je n'arrive pas à construire la bonne Regex pattern pour faire le check suivant:
    il faut vérifier si la chaîne de caractères se termine par un ou plusieurs chiffres, par ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String chaine = "toto 1234";
    j'en air créé une comme ç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
     
    String my_chaine = "iofv 154";
    String my_regex = "(^\\D+)(\\d+$)";
    Pattern pattern = Pattern.compile(my_regex);
    Matcher matcher = pattern.matcher(my_chaine);
     
    boolean matchFound = matcher.find();
    if (matchFound) {	    
        for (int i = 0; i <= matcher.groupCount(); i++) {
    	String groupStr = matcher.group(i);
    	System.out.println("group : " + groupStr);
        }
    }
    	else{
    	    System.out.println("No matches");
    	}
    Et voisi le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    roup : iofv 154
    group : iofv 
    group : 154
    je pensais de n'avoir que 2 groupes, mais apparemment j'en ai 3; Est-ce normal?

  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,


    Oui c'est normal : group(0) représente le pattern complet...


    a++

  3. #3
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Citation Envoyé par Javix Voir le message
    je pensais de n'avoir que 2 groupes, mais apparemment j'en ai 3; Est-ce normal?
    Oui, c'est normal.
    Le résultat group(0) est la chaîne matchée par le motif complet "(^\\D+)(\\d+$)".
    Le résultat group(1) est la chaîne matchée par la première parenthèse capturante "(^\\D+)".
    Le résultat group(2) est la chaîne matchée par la deuxième parenthèse capturante "(\\d+$)".

    A quoi t'attendais-tu ?

  4. #4
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    Est-ce que ça veut dire que j'aurai toujours 3 groupes si tout matches?
    Si je change pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "(^\\D*+)(\\d*+$)"
    j'ai 2 groupes. C'est quoi la différence?

  5. #5
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Citation Envoyé par Javix Voir le message
    Si je change pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "(^\\D*+)(\\d*+$)"
    j'ai 2 groupes. C'est quoi la différence?
    Euh, refais ton test, on obtient bien le même résultat.

  6. #6
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    pardon, mon erreur, le résultat est identique:
    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
     
    public static void main(String[] args) {
    	String my_chaine = "toto54";
    	String old_regex = "(^\\D+)(\\d+$)";
    	String my_regex = "(^\\D*+)(\\d*+$)";
    	Pattern pattern = Pattern.compile(my_regex);
    	Matcher matcher = pattern.matcher(my_chaine);
     
    	printResult(matcher);
     
    	pattern = Pattern.compile(old_regex);
    	matcher = pattern.matcher(my_chaine);
     
    	printResult(matcher);
     
        }
     
        private static void printResult(Matcher matcher) {
    	boolean matchFound = matcher.find();
    	if (matchFound) {
    	    for (int i = 0; i <= matcher.groupCount(); i++) {
    		String groupStr = matcher.group(i);
    		System.out.println("group-" + i + " " + groupStr);
    	    }
    	} else {
    	    System.out.println("No matches");
    	}
     
        }
    Je pensais avoir 2 groupes, mais en réalité on capte toujours le mot entier ou non? Existe-t-il une solution pour ne pas capter le mot entier ou alors c'est pas très grave? C'est pas très claire pour moi - greedy ou non-greedy...

  7. #7
    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
    Ben si tu ne veux pas le group(0), il suffit de ne pas le lire... Je ne vois pas en quoi c'est un problème


    a++

  8. #8
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Citation Envoyé par Javix Voir le message
    Je pensais avoir 2 groupes, mais en réalité on capte toujours le mot entier ou non?
    Oui, le résultat group(0) est toujours le motif entier.
    Les groupes capturant définis par des parenthèses dans ton expression régulière sont récupérés dans les résultats suivants group(i>0).

    La Javadoc est ton amie !

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

Discussions similaires

  1. [RegEx] Correction avec les expressions régulières
    Par bagu dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2007, 13h25
  2. Expression régulière correcte ?
    Par bolandfranck dans le forum VB.NET
    Réponses: 5
    Dernier message: 29/08/2007, 18h10
  3. Réponses: 1
    Dernier message: 13/04/2007, 13h39
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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