Je suis en train de créer ce qui est essentiellement un clone de SO pour m'entraîner, et j'essaie de mettre en place un système de balises, bien que j'aie quelques problèmes avec le regex pour les noms de balises.
J'essaie d'obtenir le même résultat que StackOverflow avec ses balises, à savoir :
- Toute combinaison de caractères alphanumériques, sans distinction de casse.
- 0 ou 1 de
.
,-
o_
suivi d'autres caractères alphanumériques - Un maximum de 3 points, tirets ou caractères de soulignement sont autorisés dans une balise.
Ils devraient renvoyer une correspondance positive :
exampletag
example-tag
ex-ample-tag
ex_ample_tag
ex-ample_tag
ex.am-ple_tag
Ex.4m-p1e_t4g
Et ceux-ci devraient retourner un négatif, pour le bien de la question, supposez que l'espace blanc signifie le début d'une nouvelle balise et peut être laissé sans danger à ce stade.
ex-am-pl-et-ag // and variations where there's more than 3 `-` `_` or `.`
-exampletag // no starting symbols
exampletag- // no trailing symbols
Je suis actuellement bloqué à ce stade de la regex, et je ne sais pas comment la formuler mieux/plus loin.
((\w+)(\-|\_|\.)?)\1?
Et avec mon raisonnement
( Capture the sequence of #2 and #3 into capture group #1
( Capture group #2
\w+ One or more alphanumericals
)
( Capture group #3
\-|\_|\. - _ or .
)? 0 or 1 of the preceding
)
\1? 0 or 1 of capture group #1
El \1
La partie ne fonctionne pas tout à fait comme je m'y attendais, cependant. Cela correspondra à quelque chose comme example-
mais le tag
sera un coup secondaire, et je suis coincé sur la façon de procéder à partir de là.
De préférence, je voudrais que cette regex fonctionne avec la saveur Ruby de la regex, mais quelle que soit la saveur, c'est parfait.