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 :

Souci de regex


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2015
    Messages : 24
    Points : 11
    Points
    11
    Par défaut Souci de regex
    Bonjour,

    J'essaye d'apprendre les regex sur Java EE.

    J'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String test = "0606060606";
    boolean b = Pattern.matches("/^(05|06)[0-9]{8}$/", test);
    System.out.println(b);
    Le résultat donné est False.

    J'aimerais comprendre ce qui n'est pas correcte. Si une âme charitable pouvait m'aider?

    Merci d'avance.

    Cordialement

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 12 400
    Points : 29 015
    Points
    29 015
    Billets dans le blog
    2
    Par défaut
    Salut,

    J'ai l'impression que tu mélanges les expressions régulières JavaScript et Java. En JavaScript, on utilise / comme délimiteur, à la place de la quote ou la double-quote qu'on utilise pour les chaînes de caractères. En Java, / dans un expression régulière (une chaîne de caractères à la base donc), c'est le caractère /.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2015
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    D'accord, en Java, il ne faut pas délimité la contrainte. Je dois juste noté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String test = "0606060606";
    boolean b = Pattern.matches("^(05|06)[0-9]{8}$", test);
    System.out.println(b);
    J'ai bien compris?

    Cordialement

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 12 400
    Points : 29 015
    Points
    29 015
    Billets dans le blog
    2
    Par défaut
    Oui, pour le code c'est bien ça.

    Il faut délimiter la chaîne de caractères bien sûr mais par des doubles quotes.

    En JavaScript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    var b = test.match(/^(05|06)[0-9]{8}$/);

    ou

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    var b = new RegExp(/^(05|06)[0-9]{8}$/).test(test);

    En Java :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean b = Pattern.matches("^(05|06)[0-9]{8}$", test);

    ou,
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean b = test.matches("^(05|06)[0-9]{8}$");
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2015
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Super, merci.

    Du coup, j'ai réussi .

    Merci beaucoup.

    J'ai une autre question sur les regex, je voulais en faire un pour les mot de passe sauf que ça existe déjà. Je ne vais pas réinviter la roue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-+!*$@%_]).{8,15}$
    Sauf que j'aime pas écrire un truc que je ne comprends pas et dans ce cas là je ne comprend pas tout.

    De ce que j'ai compris :

    • ? => il y a 0 ou 1 caractère concerné
    • . => Tous les caractères sont concernés
    • * => il y a 0, 1 ou plusieurs caractères concernés


    Du coup, si j'essaye de traduire avec mes mots : il y a 0 ou 1 caractère dans toutes la chaîne écrit en minuscule.

    Et quand je test (juste cette partie là), que tous les caractères doivent être en lettre minuscule sinon ça renvoie faux.

    Si tu pouvais éclairer ma lanterne, s'il te plait

    Merci d'avance.

    Cordialement

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 12 400
    Points : 29 015
    Points
    29 015
    Billets dans le blog
    2
    Par défaut
    Alors le ? qui suit une ( n'est pas le même que celui qui suit une expression.

    a? veut dire aucun ou un seul a (0 ou 1 a).

    Les parenthèses déterminent des groupes (capturant ou non). Cela permet de traiter des sous-parties de ce qui correspond à l'expression, soit en l'incluant dans la correspondance, ou non.

    Les groupes du types (? ...) sont appelés zero-width positive (ou negative) lookahead (ou lookbehind), ou plus généralement "lookaround". Ils permettent de chercher des correspondances, sans les conserver dans le résultat (donc en continuant aussi à chercher si les caractères qui correspondent, correspondent aussi au reste de l'expression régulière), du type "précédé de", ou "suivi de". Le (?= ...) cherche une correspondance du type suivi de. Par exemple "a(?=b)" matches un a suivi d'un b. Mais le find retourne que le a.

    L'astérisque, *, veut dire "n'importe quel nombre". Donc a*, veut dire n'importe quel nombre de a. Donc (?=a*) veut dire "suivi de n'importe quel nombre de a).

    (?=.*[a-z]) veut dire donc "suivi de n'importe quel nombre de caractères quelconques suivi d'une lettre minuscule.

    Ce motif s'applique à tous les caractères.

    Le motif .{8,15} signifie au minimum 8 caractères, au maximum 15. Donc, si on n'avait que ça, on pourrait avoir n'importe quelle chaîne de caractères de longueur entre 8 et 15 caractères comme mot de passe.

    Le motif (?=.*[a-z]) s'applique à tous ces caractères (y compris le début (le ^)) en disant, je veux que n'importe lequel de ces caractères soit suivi d'une lettre minuscule (qu'elle soit juste après, ou après zéro ou plusieurs autres caractères quelconques).
    Le motif (?=.*[A-Z]) s'applique à tous ces caractères (y compris le début (le ^)) en disant, je veux que n'importe lequel de ces caractères soit suivi d'une lettre majuscule (qu'elle soit juste après, ou après zéro ou plusieurs autres caractères quelconques)
    Le motif (?=.*[0-9]) s'applique à tous ces caractères (y compris le début (le ^)) en disant, je veux n'importe lequel de ces caractères soit suivi d'un chiffres (qu'il soit juste après, ou après zéro ou plusieurs autres caractères quelconques)
    Le motif (?=.*[-+!*$@%_]) s'applique à tous ces caractères (y compris le début d'expression (le ^)) en disant, je veux n'importe lequel de ces caractères soit suivi d'un des caractères entre crochets (qu'il soit juste après, ou après zéro ou plusieurs autres caractères quelconques)

    En résumé, n'importe quel caractère (ou le début de chaîne) doit être suivi d'un de ces caractères. On cherche donc en résumé à ce qu'il y ait, dans tout mot de passe au moins une minuscule, une majuscule, un chiffre et un symbole parmi ceux listés.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2015
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Tout d'abord merci d'avoir pris le temps de m'éclairer.

    Grâce à toi, j'ai compris la signification des différents termes. J'ai voulu mettre en application pour vérifier.

    Et là, je me retrouve face à un mur.

    J'ai tenter de faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern.matches("(?=.*[a-z])", "Essai")
    Sauf que ça me renvoie faux, pourtant si j'ai tout compris, le regex doit vérifier qu'il y a bien au moins un caractère suivi d'une minuscule.

    Est ce que j'ai mal compris?

    Ou est ce que l'utilisation de (?= ... ) se fait sous certaines conditions?

    Cordialement

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 12 400
    Points : 29 015
    Points
    29 015
    Billets dans le blog
    2
    Par défaut
    (?=.*[a-z]) c'est juste une assertion (une condition pour dire que ça matche ou pas), elle ne capture rien, il n'y a rien de sélectionné, donc ça ne fera pas partie du résultat. En plus, la notion de "suivi de" implique forcément "quelque chose suivi de"... et c'est ça qui sera capturé par l'expression régulière, donc utilisé pour déterminer si la chaîne correspond ou pas à l'expression.

    Il faut faire par exemple :

    • (?=.*[a-z]).* un nombre quelconques de caractères, tel qu'il y ait au moins une lettre minuscule
    • ou (?=.*[a-z])\\w+ au moins une lettre (minuscule ou majuscule) ou un chiffre (de 0 à 9), tel qu'il y ait au moins une lettre minuscule
    • ou [A-Z](?=.*[a-z]).* ou une lettre majuscule, suivie de n'importe quel nombre de caractères, dont au moins une lettre minuscule.
      [c]...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2015
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    D'accord, merci beaucoup tu m'as bien aidé .

    Cordialement

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

Discussions similaires

  1. Souci de Regex
    Par ApocalypseDuck dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2009, 16h45
  2. soucis de regex
    Par Miaou le chat thon dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/12/2008, 15h32
  3. [RegEx] Souci des regex pour les puces donc erreurs W3C
    Par retour dans le forum Langage
    Réponses: 10
    Dernier message: 04/10/2008, 15h09
  4. Soucis avec regex.replace
    Par elric47 dans le forum ASP
    Réponses: 1
    Dernier message: 29/04/2008, 23h33
  5. [REGEX] Souci de regex
    Par LE NEINDRE dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 09h01

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