Hola, personalmente siempre recomiendo evitar el uso de las funciones que utilizan el motor de expresiones regulares ya que disminuye la performance del script, a no ser que sea realmente necesario.
Por suerte PHP dispone de muchisimas funciones para trabajar con cadenas.
Te dejo el siguiente codigo, espero que te sirva.
Código PHP:
<?php
function formateo_rut($rut_param){
//validaciones varias
//....
$parte1 = substr($rut_param, 0,2); //12
$parte2 = substr($rut_param, 2,3); //345
$parte3 = substr($rut_param, 5,3); //456
$parte4 = substr($rut_param, 8); //todo despues del caracter 8
return $parte1.".".$parte2.".".$parte3."-".$parte4;
}
$rut = "12345456k";
echo formateo_rut($rut);
?>
saludos, Juan.