introduction
Je ne vois pas beaucoup de défis regex ici, donc je voudrais proposer celui-ci d'une simplicité trompeuse qui peut être fait de plusieurs façons en utilisant un certain nombre de saveurs regex. J'espère que cela offre aux amateurs de regex un peu de plaisir à jouer au golf.
Défi
Le défi est de faire correspondre ce que j'ai très vaguement appelé une série «égalitaire»: une série de nombres égaux de personnages différents. Ceci est mieux décrit avec des exemples.
Rencontre:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
Ne correspond pas:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
Pour généraliser, nous voulons faire correspondre un sujet du formulaire ( pour toute liste de caractères à , où pour tousc1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
Clarifications:
L'entrée ne sera pas vide.
Un caractère peut se répéter plus tard dans la chaîne (par exemple "banane")
k > 1
, il y aura donc toujours au moins 2 caractères différents dans la chaîne.Vous pouvez supposer que seuls les caractères ASCII seront transmis en entrée et aucun caractère ne sera un terminateur de ligne.
Règles
(Merci à Martin Ender pour ce bloc de règles excellemment énoncé)
Votre réponse doit consister en une seule expression régulière, sans code supplémentaire (sauf, éventuellement, une liste de modificateurs d'expression régulière requis pour faire fonctionner votre solution). Vous ne devez pas utiliser les fonctionnalités de la saveur regex de votre langue qui vous permettent d'invoquer du code dans le langage d'hébergement (par exemple le e
modificateur de Perl ).
Vous pouvez utiliser n'importe quelle saveur regex qui existait avant ce défi, mais veuillez spécifier la saveur.
Ne supposez pas que l'expression régulière est ancrée implicitement, par exemple si vous utilisez Python, supposez que votre expression régulière est utilisée avec re.search et non avec re.match. Votre expression régulière doit correspondre à la chaîne entière pour les chaînes égalitaires valides et ne produire aucune correspondance pour les chaînes non valides. Vous pouvez utiliser autant de groupes de capture que vous le souhaitez.
Vous pouvez supposer que l'entrée sera toujours une chaîne de deux ou plusieurs caractères ASCII ne contenant aucun terminateur de ligne.
C'est le golf regex, donc le regex le plus court en octets gagne. Si votre langue nécessite (généralement /.../
) des délimiteurs pour désigner des expressions régulières, ne comptez pas les délimiteurs eux-mêmes. Si votre solution nécessite des modificateurs, ajoutez un octet par modificateur.
Critères
C'est un bon golf à l'ancienne, alors oubliez l'efficacité et essayez simplement d'obtenir votre regex aussi petit que possible.
Veuillez indiquer la saveur regex que vous avez utilisée et, si possible, inclure un lien montrant une démonstration en ligne de votre expression en action.
banana
est égalitaire.