Substitua a string apenas uma vez com php preg_replace

Eu preciso de uma seqüência de substituição uma vez que a function e acreditar que preg_match pode ser minha melhor aposta.

Eu estava usando isso, mas devido à dinâmica de uso, às vezes esta function se comporta de forma estranha:

function str_replace_once($remove , $replace , $string) { $pos = strpos($string, $remove); if ($pos === false) { // Nothing found return $string; } return substr_replace($string, $replace, $pos, strlen($remove)); } 

Agora eu estou tomando essa abordagem, mas corro para o erro listado abaixo …. Estou analisando todos os tipos de strings html com esta function, por isso é difícil dar um valor que está causando o erro. A partir de agora, 80% dos meus usos dos abaixo mostram esse erro.

 function str_replace_once($remove , $replace , $string) { $remove = str_replace('/','\/',$remove); $return = preg_replace("/$remove/", $replace, $string, 1); return $return; } 

erro:

Aviso: preg_replace () [function.preg-replace]: Compilação falhou: nada para repetir no deslocamento 0

Alguém pode refinar uma solução?

Você está procurando por preg_quote vez de tentar escaping do \ você mesmo (o que não leva [ , + e muitos outros em conta):

 $return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);