Estou procurando um regex
padrão que corresponda à terceira, quarta, ... ocorrência de cada personagem. Veja abaixo os esclarecimentos:
Por exemplo, eu tenho a seguinte string:
111aabbccxccybbzaa1
Quero substituir todos os caracteres duplicados após a segunda ocorrência. A saída será:
11-aabbccx--y--z---
Alguns padrões de regex que eu tentei até agora:
Usando o seguinte regex, posso encontrar a última ocorrência de cada caractere: (.)(?=.*\1)
Ou, usando este, eu posso fazer isso por duplicatas consecutivas, mas não por duplicatas: ([a-zA-Z1-9])\1{2,}
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
regex. Demo .
(.)(?<=(.*\1){3})
?
(.)(?<=(?:.*\1){3})
também fará o trabalho, mas tudo isso não é bom, pois o retorno excessivo pode causar problemas com seqüências mais longas. Prefiro escrever um método que não seja regex para resolver o problema.
(.)(?<=(?:.*\1){3})
25ms, (.)(?<=(?:\1.*?){2}\1)
3ms. Você pode apenas testar a si mesmo. O seu parece ser o padrão menos eficiente e mais difícil de ler.