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.
Auteur du sujet

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)

Édité par babas

Vous m’avez reproché de penser que j’avais toujours raison. Et je me suis rendu compte que vous aviez raison…. Mais allez savoir si j’ai raison !

+0 -0

Hello

Pour rendre tes listes plus lisibles, pense à bien laisser une ligne vierge entre le paragraphe qui la précède et son premier item, comme ceci :)

1
2
3
4
5
6
Un paragraphe

- Un
- Deuch
   - Deuch et demie
   - Deuch trois quart

A graphical interface is like a joke: if you have to explain it, that’s shit.

+2 -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().

Édité par motet-a

+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

Vous aimez le frontend ? Il y a un tas de petites tâches faciles si vous voulez contribuer à ZdS : https://github.com/zestedesavoir/zds-site/issues?q=is%3Aissue+is%3Aopen+label%3AC-Front

+1 -0

@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).

Édité par blo yhg

+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. ;)

Vous aimez le frontend ? Il y a un tas de petites tâches faciles si vous voulez contribuer à ZdS : https://github.com/zestedesavoir/zds-site/issues?q=is%3Aissue+is%3Aopen+label%3AC-Front

+0 -0

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.

Édité par blo yhg

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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