Replace string only once with php preg_replace
I need a replace string once function and believe preg_match might be my best bet.
I was using this, but due to the dynamicness of use, sometimes this function behaves strangely:
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));
}
Now I am taking this approach but have ran to to the error listed below.... I'm parsing all kinds of html strings with this function, so its hard to give a value thats causing the error. As of now 80% of my uses of the below show this error .
function str_replace_once($remove , $replace , $string)
{
$remove = str_replace('/','\/',$remove);
$return = preg_replace("/$remove/", $replace, $string, 1);
return $return;
}
error:
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0
Can anyone refine a solution?
You are looking for preg_quote
instead of trying to escape the \
yourself (which doesn't take [
, +
and many others into account):
$return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);