Замените строку только один раз с помощью php preg replace


Мне нужна функция замены строки один раз, и я считаю, что 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() [функция.preg-замена]: Ошибка компиляции: ничего не повторяется при смещении 0

Может ли кто-нибудь уточнить решение?

Author: hakre, 2010-08-03

1 answers

Вы ищете preg_quote вместо того, чтобы пытаться убежать от \ себя (что не требует [, + и многие другие во внимание):

$return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);
 6
Author: Wrikken, 2010-08-02 23:21:01