Това зависи много от това как са форматирани вашите данни в $r_val , но добро начало би било да опитате:
$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Където \b е знак с дължина 0, представляващ началото или края на „дума“.
Колкото и странно да звучи, но документацията за регулярен израз на Perl
всъщност е много добър за обяснение на регулярния израз на preg_* функции, тъй като Perl е мястото, където функционалността всъщност се изпълнява.