Замените строку только один раз с помощью 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
Может ли кто-нибудь уточнить решение?
2
1 answers
Вы ищете preg_quote
вместо того, чтобы пытаться убежать от \
себя (что не требует [
, +
и многие другие во внимание):
$return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);
6
Author: Wrikken, 2010-08-02 23:21:01