Isso depende muito de como seus dados são formatados dentro de
$r_val , mas um bom lugar para começar seria tentar:$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Onde
\b é um caractere de comprimento 0 que representa o início ou o fim de uma 'palavra'. Por mais estranho que possa parecer, mas a documentação de regex Perl é realmente muito bom para explicar a parte regex do
preg_* funções, já que Perl é onde a funcionalidade é realmente implementada.