Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace string only once with php preg_replace

Tags:

string

regex

php

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?

like image 829
atwellpub Avatar asked Feb 26 '23 13:02

atwellpub


1 Answers

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);
like image 179
Wrikken Avatar answered Mar 01 '23 11:03

Wrikken