Dies hängt stark davon ab, wie Ihre Daten in $r_val formatiert sind , aber ein guter Anfang wäre, es zu versuchen:
$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Wobei \b ist ein Zeichen der Länge 0, das den Anfang oder das Ende eines „Wortes“ darstellt.
So seltsam es klingen mag, aber die Perl-Regex-Dokumentation
ist wirklich gut, um den Regex-Teil von preg_* zu erklären Funktionen, da die eigentliche Funktionalität in Perl implementiert ist.