Замените строку только один раз с php preg_replace - PullRequest
2 голосов
/ 03 августа 2010

Мне нужна функция замены строки один раз, и я считаю, что 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 ]

5 голосов
/ 03 августа 2010

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

$return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);
0 голосов
/ 24 июня 2019

Вы также можете использовать библиотеку T-Regx :

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

, а также не следует использовать preg_quote(), так как это небезопасно - попробуйте Подготовленные шаблоны .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...