用php preg_replace只替换字符串一次

时间:2010-08-02 23:15:38

标签: regex string php

我需要一个替换字符串一次,并且相信preg_match可能是我最好的选择。

我正在使用它,但由于使用的动态性,有时这个功能表现得很奇怪:

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

现在我采用这种方法,但已经遇到下面列出的错误....我正在使用此函数解析所有类型的html字符串,因此很难给出导致错误的值。截至目前,我对以下80%的使用都显示了此错误。

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

错误:

  

警告:preg_replace()[function.preg-replace]:编译失败:在偏移0处不重复

任何人都可以改进解决方案吗?

2 个答案:

答案 0 :(得分:6)

您正在寻找preg_quote而不是试图逃避\自己(不考虑[+和其他许多人:

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

答案 1 :(得分:0)

您也可以使用T-Regx library

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

而且您也不应该使用preg_quote(),因为它不安全-请尝试Prepared Patterns