regexHer karakterin üçüncü, dördüncü, oluşumu ile eşleşecek bir model arıyorum . Açıklama için aşağıya bakın:
Örneğin ben aşağıdaki dize var:
111aabbccxccybbzaa1
İkinci olaydan sonra tüm yinelenen karakterleri değiştirmek istiyorum. Çıktı şöyle olacaktır:
11-aabbccx--y--z---
Şimdiye kadar denediğim bazı regex kalıpları:
Aşağıdaki normal ifadeyi kullanarak her karakterin son tekrarlamasını bulabilirim:
Ya da bunu kullanarak ardışık kopyalar için yapabilirim ama herhangi bir kopya için değil:
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)Normal ifade ile kullanın . Demo .
(.)(?<=(.*\1){3})?
(.)(?<=(?:.*\1){3})İşi de yapacak, ancak bunların hepsi iyi değil çünkü aşırı geri izleme daha uzun dizelerle ilgili sorunlara neden olabilir. Sorunu çözmek için regex olmayan bir yöntem yazmayı tercih ederim.
(.)(?<=(?:.*\1){3})25ms, 3ms gibi performans farkı elde ederim (.)(?<=(?:\1.*?){2}\1). Kendinizi test edebilirsiniz. Sizinki en az verimli desen gibi görünüyor ve okumak en zor.