Regex

Fermé
lucky - 16 juil. 2017 à 17:48
 lucky - 17 juil. 2017 à 17:33
Bonjour,

Je suis en train de développer une sorte de jeu.

J'ai besoin d'imposer la saisie d'un mot avec les contraintes suivantes:

- le mot doit contenir 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 (ex.: neige)
- 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 réponses

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
16 juil. 2017 à 18:13
bonjour, moi je ferais une petite fonction en php, qui ferait ceci:
- vérifier que la longueur est 5
- classer les lettres par ordre alphabétique
- compte le nombre de fois que deux lettres qui se suivent sont identiques
- vérifier que le nombre calculé est 1
1
Merci, intéressant !
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
16 juil. 2017 à 19:06
Bonjour en 2 fois c'est assez facile.

Le test sur la longueur, comme le propose yg_be, n'arrêtera pas des chiffres ou des caractère spéciaux, or quand je lis "mot" j'interprète "lettres", même si plus bas tu écris "caractères". Donc je propose comme 1ere regex
\b[A-Z]{5}\b
qui va chercher des mots de 5 lettres dans un texte ou
$[A-Z]{5}$
qui n'acceptera que des entrées complètes de 5 lettres, dans les 2 cas tu peux cocher l'option IgnoreCase.
Exemple 1
Exemple 2

La 2eme Regex
(?<=[^\1]*)(.)(?=[^\1]+\1[^\1]*)
va extraire les caractères en double séparées d'au moins un caractère différent. S'il y a plusieurs captures comme dans cet exemple alors ton mot n'est pas bon.



0
Merci !

Effectivement ma recherche ne s'effectue que sur des lettres (a-z).

Comme la recherche va se faire sur une liste de plusieurs milliers de mots en base de données, il n'y aurait pas la possibilité de définire un critère de recherche qui afficherait directement tous les mots qui répondent à mes critères ?

(Désolé je suis vraiment pas doué en regex...)
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié le 17 juil. 2017 à 17:15
Comme tu le vois la 2eme regex est déjà un peu compliquée, on se sert d'une capture relative pour vérifier s'il existe 2 lettres en double et si ces 2 lettres ne sont pas consécutives. Et s'il y en a 2 ça matche aussi....

Le tout en un, j'ai cherché un petit moment et je n'ai pas trouvé, c'est peut être possible cela dit.

Si tu cherches en bases de données, tu peux peut être faire une requête qui sort tous les mots de 5 lettres, puis une requête sur le résultat de la précédente avec la 2eme regex (je ne connais pas PHP, mais ça se fait très bien dans d'autres langages).

Ou même si tu es certain, qu'il n'y a que des mots dans la base de données, faire directement une requête avec la 2eme Regex.
0
Effectivement, avec 2 requêtes ça peut le faire.

Merci en tout cas pour le temps que tu as passé là dessus (c'est pas rien !)
0