Мне нужна функция замены после функции и считаю, что 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
Может ли кто-нибудь уточнить решение?
Вы ищете preg_quote
вместо того, чтобы пытаться избежать \
the \
yourself (что не учитывает [
, +
и многие другие]:
$return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);