Introdução
Não vejo muitos desafios de regex aqui, portanto, gostaria de oferecer esse enganosamente simples que pode ser feito de várias maneiras, usando vários sabores de regex. Espero que ele ofereça aos entusiastas de regex um pouco de diversão no golfe.
Desafio
O desafio é igualar o que denominei muito livremente de uma série "igualitária": uma série de números iguais de personagens diferentes. Isso é melhor descrito com exemplos.
Combine:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
Não corresponde:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
Para generalizar, queremos corresponder a um assunto da forma ( para qualquer lista de caracteres para onde para todosc1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
Esclarecimentos:
A entrada não estará vazia.
Um personagem pode se repetir mais tarde na sequência (por exemplo, "banana")
k > 1
, sempre haverá pelo menos 2 caracteres diferentes na string.Você pode assumir que apenas caracteres ASCII serão passados como entrada e nenhum caractere será um terminador de linha.
Regras
(Obrigado a Martin Ender por este bloco de regras excelentemente declarado)
Sua resposta deve consistir em um único regex, sem nenhum código adicional (exceto, opcionalmente, uma lista de modificadores de regex necessários para fazer sua solução funcionar). Você não deve usar recursos do tipo regex do seu idioma que permitam invocar código no idioma de hospedagem (por exemplo, o e
modificador do Perl ).
Você pode usar qualquer sabor de regex que existia antes deste desafio, mas especifique o sabor.
Não assuma que o regex esteja ancorado implicitamente, por exemplo, se você estiver usando Python, assuma que seu regex seja usado com re.search e não com re.match. Seu regex deve corresponder a toda a cadeia de caracteres para seqüências igualitárias válidas e não produzir correspondências para cadeias de caracteres inválidas. Você pode usar quantos grupos de captura desejar.
Você pode assumir que a entrada sempre será uma sequência de dois ou mais caracteres ASCII que não contém nenhum terminador de linha.
Como o regex golf, ganha o menor regex em bytes. Se o seu idioma exigir delimitadores (geralmente /.../
) para indicar expressões regulares, não conte os delimitadores. Se sua solução exigir modificadores, adicione um byte por modificador.
Critério
Este é um bom golfe à moda antiga, então esqueça a eficiência e tente obter o máximo de regex possível.
Mencione qual sabor de expressão regular você usou e, se possível, inclua um link mostrando uma demonstração online da sua expressão em ação.
banana
é igualitário.