Esto depende mucho de cómo se formatean tus datos dentro de $r_val , pero un buen lugar para comenzar sería probar:
$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Donde \b es un carácter de longitud 0 que representa el comienzo o el final de una 'palabra'.
Por extraño que parezca, pero la documentación de expresiones regulares de Perl
es realmente muy bueno para explicar la parte de expresiones regulares del preg_* funciones, ya que Perl es donde realmente se implementa la funcionalidad.