开发者

Replace string only once with php preg_replace

开发者 https://www.devze.com 2023-01-10 11:01 出处:网络
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:

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);


You can also use T-Regx library:

pattern('[a-z]+')->replace($string)->first()->with($replace);

and also you should not use preg_quote(), as it's not safe - try Prepared Patterns.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号