To hodně závisí na tom, jak jsou vaše data naformátována v $r_val , ale dobré místo pro začátek by bylo zkusit:
$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Kde \b je znak o délce 0, který představuje začátek nebo konec slova.
Jakkoli to může znít divně, ale dokumentace regexu Perl
je ve skutečnosti opravdu dobrý pro vysvětlení části regulárního výrazu preg_* funkce, protože Perl je místo, kde je funkce skutečně implementována.