O padrão no comando substituto é: [:;]\([^:;]*\)\([:;].*\)[;:] . Observe o no final. Isso significa que qualquer texto corresponde ao primeiro grupo, \([^:;]*\) também deve ocorrer no final do padrão.
Seu espaço de padrão é inicialmente 0000:1111:2222:3333:4444:1111:2222:3333:0000 . O padrão corresponde a :1111:2222:3333:4444:1111 e 1111 corresponde ao primeiro grupo e também a no final.
Após a primeira rodada de substituições, o espaço padrão foi alterado para 0000:1111:2222:3333:4444:2222:3333:0000 . Agora, se o 1111 no espaço de padrão for usado para corresponder a \([^:;]*\) , não haverá 1111 para corresponder a . Assim, o padrão não corresponde e o mecanismo de regex tenta outra coisa. Nesse caso, usando a próxima correspondência disponível para o primeiro grupo, 2222 , funciona.