Ini sangat bergantung pada bagaimana data Anda diformat di dalam $r_val , tetapi tempat yang baik untuk memulai adalah dengan mencoba:
$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Dimana \b adalah karakter panjang 0 yang mewakili awal atau akhir 'kata'.
Kedengarannya aneh, tetapi Dokumentasi regex Perl
sebenarnya sangat bagus untuk menjelaskan bagian regex dari preg_* fungsi, karena Perl adalah tempat fungsionalitas sebenarnya diimplementasikan.