Signaler

Regex

Posez votre question lucky - Dernière réponse le 17 juil. 2017 à 17:33 par lucky
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 ! :)
Utile
+1
plus moins
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
Cette réponse vous a-t-elle aidé ?  
lucky- 17 juil. 2017 à 15:46
Merci, intéressant !
Répondre
Donnez votre avis
Utile
+0
plus moins
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.



lucky- 17 juil. 2017 à 15:52
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...)
Répondre
Whismeril 10350Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 22 novembre 2017 Dernière intervention - 17 juil. 2017 à 17:12
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.
Répondre
lucky- 17 juil. 2017 à 17:33
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 !)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !