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 PHP Discussion :

regex 2 lettres identiques dans un dico


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 8
    Points
    8
    Par défaut regex 2 lettres identiques dans un dico
    Bonjour,

    Je suis débutant (très) en regex.
    Voici mon problème:

    Dans un dictionnaire de mots, je cherche la regex qui répond aux critères suivants:

    - trouver un mot qui contient 5 caractères (ni plus, ni moins)
    - ce mot doit contenir 2 lettres identiques (et pas plus) (et idéalement qui ne se suivent pas)
    - toutes les autres lettres doivent être différentes
    (ex.: "neige" qui contient 5 caractères, 2 fois la lettre « e » et les autres lettres sont différentes)

    Merci d'avance pour vos lumières !

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ce n'est pas un problème pour débutant car ce n'est pas spécialement simple à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \b(?=\w{5}\b)(?=(\w*?(\w))\w+\2)(?!\1\w*(\w)\w*\3)(?!\w*(\w)\4)\w+
    démo

    Explication: si tu ne connais pas les groupes de capture (capture groups), les références aux groupes de capture (backreference), et les tests avant (lookahead) va d'abord voir le tutoriel de Guillaume Rossolini sur le site.
    • \b(?=\w{5}\b) sélectionne une position dans la chaîne au début d'un mot de 5 caractères.
    • (?=(\w*?(\w))\w+\2) fait deux choses: il trouve le premier caractère répété avec au moins un caractère de séparation (en utilisant le groupe 2 et sa référence) et capture dans le groupe 1 le début du mot jusqu'à ce caractère inclus (ce qui va être utile pour la suite).
    • (?!\1\w*(\w)\w*\3) vérifie qu'il n'y a pas d'autre caractère répété avec un caractère de séparation au delà de celui qui a été trouvé précédemment, c'est pour celà que la sous pattern commence par une référence au groupe de capture 1.
    • (?!\w*(\w)\4) vérifie qu'il n'y a pas de caractères répétés consécutifs.
    • \w+ matche le mot.


    À noter que je n'ai pas raccourci la pattern en \b(?=(\w*?(\w))\w+\2)(?!\1\w*(\w)\w*\3)(?!\w*(\w)\4)\w{5}\b pour pouvoir exclure rapidement tous les mots qui n'ont pas 5 caractères sans avoir à tester les conditions plus complexes.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Chapeau bas !!!

    Je ne pensais pas que ce soit faisable avec une regexp.

    @dany013.

    Il faut mettre la chaîne de la regexp entre ' et non pas entre "... parce que je me suis fait avoir au début.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 8
    Points
    8
    Par défaut waouh
    Je suis réellement impressionné !!!!

    Merci en tout cas d'avoir pris la peine de me répondre, et en plus avec des explications très précises !

    Je vais tester tout ça et je vous fais un retour !

    Encore merci

Discussions similaires

  1. [VBA-E] lettre identique dans onglet
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 07/02/2007, 11h02
  2. Envoi de dates identiques dans des tables
    Par beurnoir dans le forum Access
    Réponses: 6
    Dernier message: 10/10/2005, 20h22
  3. fonction dont les argument sont dans un dico
    Par GConstant dans le forum Général Python
    Réponses: 1
    Dernier message: 12/08/2004, 18h24
  4. Comment compter le nombre de lettre identique ?
    Par divableue dans le forum ASP
    Réponses: 3
    Dernier message: 07/11/2003, 15h01
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57

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