regex pour contrôler un path

ou comment demander de l'aide avant d'arracher mon dernier cheveux

a marqué ce sujet comme résolu.

Bonjour à tous, Je cherche le moyen, via une regex, de controler une string contenant des path du type :

  • le
  • le/chemin
  • le/chemin-a/verifier
  • le/chemin-que/je-cherche-a/verifier

en détail, ça donne ça :

  • Un premier groupe de deux lettres (obligatoire)
  • Un ou plusieurs groupes de lettres (facultatif) qui :
    • Doivent obligatoirement commencer par un slash
    • Doivent obligatoirement contenir uniquement des lettres minuscules
    • Peuvent éventuellement contenir un ou plusieurs tirets qui :
      • Doivent être séparer par au moins une lettre
      • Ne peuvent pas être avant ou après le slash

Hé ben, quand un est allergique au regex comme moi, c’est vraiment pas une partie de plaisir :D Si quelqu’un veut bien me filer un tout petit coup de pouce dans la construction, ça serait cool ! Merci

PS: je demande pas une regex toute faite, loin de là, juste une aide (mon but étant vraiment de comprendre, pas de bêtement copier-coller)

+0 -0

Salut,

regex101 est pas mal, après il vaut généralement mieux se référrer à la documentation de la bibliothèque que tu utilises : Il y a des douzaines de syntaxes différentes et incompatibles.

Notes que rien ne t’obliges à utiliser des regexps. Par exemple, avec Python, tu peux rapidement résoudre ton problème à coup de str.split().

+0 -0
  • le
  • le/chemin
  • le/chemin-a/verifier
  • le/chemin-que/je-cherche-a/verifier

en détail, ça donne ça :

  • Un premier groupe de deux lettres (obligatoire)
  • Un ou plusieurs groupes de lettres (facultatif) qui :
    • Doivent obligatoirement commencer par un slash
    • Doivent obligatoirement contenir uniquement des lettres minuscules
    • Peuvent éventuellement contenir un ou plusieurs tirets qui :
      • Doivent être séparer par au moins une lettre
      • Ne peuvent pas être avant ou après le slash
babas

J’ai un plugin bien pratique dans mon Atom, un truc qui s’appelle sauf erreur Regex Railroad. Ça montre l’automate d’une regex.

Du coup j’ai vite construit une regex pour t’approcher du but et te montrer.

Dans l’ordre, ce que je fais, c’est :

  1. Un groupe de 2 lettres minuscules
  2. Un groupe qui commence par un /
    1. Puis au moins une minuscule, puis peut-être une minuscule ou tiret, enfin au moins une minuscule
    2. OU juste une minuscule (vu que 2.1 n’autorise pas a mais a…-a…)
  3. On répète éventuellement 2.1+2.2
  4. On marque 2. comme optionnel et pouvant se répéter
+1 -0
Banni

@victor : C’est pas * pour optionnel et pouvant se répéter au lieu de ? ? (à la fin de ta regex)

Sinon il me semble qu’il y a une erreur dans ta regex, par exemple le/a-b-c n’est pas reconnu (pas sûr puisque j’ai pas pu copier-coller).

+0 -0

Oui blo yhg, bien vu, à la fin ça devrait être *: [a-z]{2}(\/([a-z]+[a-z-]?[a-z]+|[a-z]+)+)*.

Comme t’as constaté le/a-b-c passe pas. Comme je disais ma regex l’approche du but, je voulais dire par là qu’elle est probablement pas parfaite, mais je trouvais intéressant de montrer comment j’approche le problème et l’outil que j’utilise puisqu’il m’aide généralement à comprendre des regex. ;)

+0 -0
Banni

Comme t’as constaté le/a-b-c passe pas. Comme je disais ma regex l’approche du but, je voulais dire par là qu’elle est probablement pas parfaite, mais je trouvais intéressant de montrer comment j’approche le problème et l’outil que j’utilise puisqu’il m’aide généralement à comprendre des regex. ;)

victor

Ah oui, j’avais lu trop vite. Du coup je supprime la suite de mon dernier message qui donnait sans doute trop la solution.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte