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èmes de regex


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 494
    Billets dans le blog
    8
    Par défaut Problèmes de regex
    Bien le bonsoir,

    J'ai décidé de me pencher sérieusement sur les regex, mais même après lecture de quelques docs, je ne comprends pas leur utilisation. (Enfin, j'ai pigé, mais vaguement, surtout quand on cherche plusieurs occurrences différentes des unes des autres)

    Je souhaite retrouver au moins 5 chiffres, 5 lettres minuscules et 5 lettres majuscules dans n'importe quel ordre.

    J'ai donc trouvé logique d'écrire ceci:

    Mais visiblement, ma logique laisse un peu à désirer, donc j'ai choisi de tester petit à petit en ne cherchant que les lettres (minuscules et majuscules) avec cette expression:

    Mais ça m'affiche une erreur dès que le matcher a trouvé une occurrence dans mon message, voici le message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Matcher match = patt.matcher("12345AZERTYUIOPazertyuiop"); //10 lettres minus et 10 lettres majuscules pour être sûr
    Je suis obligé de mettre une quantité astronomique de caractères pour qu'il trouve au moins une occurrence pour que ça casse ensuite...

    Vous auriez une idée d'où pourrait venir mon erreur ?

    En attente de votre réponse,

    Cordialement,

    Songbird.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Quelle erreur ça t'affiche?

  3. #3
    Membre Expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 494
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Quelle erreur ça t'affiche?
    Bonsoir,

    Tout à l'heure, ça m'affichait "match not found", un truc du genre.

    Maintenant, vu que j'ai mis une condition, ça me dit que le mot de passe ne correspond pas aux attentes demandées, alors que c'est le cas.... au moins 5 chiffes, 5 minus, 5 majuscules.

    Voici le code complet:

    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
     
    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
     
     
    public class RegTest {
    	Pattern patt = Pattern.compile("[a-zA-Z]{5}[0-9]{5}");
    	Matcher match = patt.matcher("12345azertAZERT");
     
    	public RegTest(){
     
    	}
    	public void searchMatch(){
    		if(match.find()){
    				for(int i =0; match.find(); i++){
    					System.out.println("Ok ?"+match.find());
    					System.out.println("Trouvé: "+match.group());
    				}
    		}
     
    		else if(!match.find()){
    			System.out.println("Ok ?"+match.find());
    			System.out.println("Le mot de passe n'est pas assez robuste.");
    		}
    	}
     
    	public static void main(String[] args){
    		new RegTest().searchMatch();
    	}
    }
    Merci à toi.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Les patterns ça se lit de gauche à droite. Ca dit 5 lettres suivies de 5 chiffre. Il faut faire les choses dans l'ordre. Tu cherche à faire une expression qui validera la totalité sur trois règles distinctes: au moins 5 chiffres, au moins 5 minuscules, au moins 5 majuscule. Pour ça il faut utiliser des groupes non capturant:

    (?=au moins 5 chiffres)(?=au moins 5 minuscules)(?=au moins 5 majuscule)


    maintenant, c'est quoi "au moins 5 chiffres"? Ce n'est pas [0-9]{5} Car ça, ça veux dire exactement 5 chiffres successifs. Non, c'est 5 fois un chiffre avec peut être autre chose autour:
    (.*[0-9].*){5,}
    Pareil avec les minuscules et majuscules

    (.*[a-z].*){5,}
    (.*[A-Z].*){5,}
    et mettant ensemble, on aurait un truc dans ce gout là:

    (?=(.*[0-9].*){5,})(?=(.*[a-z].*){5,})(?=(.*[A-Z].*){5,})

  5. #5
    Membre Expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 494
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    [a-zA-Z]{5}[0-9]{5}

    (?=(.*[0-9].*){5,})(?=(.*[a-z].*){5,})(?=(.*[A-Z].*){5,})
    Je te remercie pour la clarté de ton explication, j'essaierai ça demain !

    Une dernière question: A quoi correspond le symbole "?=" que tu as utilisé ?


    Bonne soirée.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je l'ai dit, c'est un groupe non capturant

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

Discussions similaires

  1. [Java] Problème de Regex
    Par spk4ever dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/08/2006, 10h51
  2. Problème avec Regex
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 14h50
  3. problème de regex
    Par lanfeust42 dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2006, 15h32
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

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