Son yazıyı görmemiştim bende şöyle bi regex yazdım üç aşağı beş yukarı aynı

(.{16})21(.{12})17(.{6})10(.*)

http://regex101.com/r/nN5yS5/1

Bir ufak detay sizin kodda eğer içinde 21 vs.. varsa sorun çıkartacaktır bilginize,

bu arada bu sabit uzunluktaysa regex yerine substr daha mantıklı.

bi de sadece bu rakamlardan bölecekseniz

preg_split("%21|17|10%",$deger)

şeklinde de arraya alabilirsiniz.