[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сделать ровно одну замену
ferol
PHP
str_replace($vr$zam$ra);

заменяет все вхождения $vr на $zam. Как заменить только одно вхождение? (не важно какое по счету)



Спустя 24 минуты, 6 секунд (19.01.2009 - 10:07) Adamant написал(а):
preg_replace ( mixed $pattern, mixed $replacement, mixed $subject [, int $limit] )

В случае, если параметр limit указан, будет произведена замена limit вхождений шаблона;


Спустя 3 часа, 13 минут, 17 секунд (19.01.2009 - 13:20) ferol написал(а):
Цитата (Adamant @ 19.01.2009 - 07:07)
preg_replace ( mixed $pattern, mixed $replacement, mixed $subject [, int $limit] )

В случае, если параметр limit указан, будет произведена замена limit вхождений шаблона;

я потому и спросил, что preg_replace работает только с шаблонами. Мне же нужно в строке найти $vr (не конкретно "слово", а именно значение переменной) и заменить его на $zam. Если писать
PHP
preg_replace($vr, $zam, $ra,1);
выдает ошибку
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in server\test.php on line xx.
eval и прочие ухищрения использовать не хотелось бы, потому что мне надо делать много замен, и надо избежать ненужных действий.

Спустя 47 минут, 11 секунд (19.01.2009 - 14:07) Sephiroth_Lukaw написал(а):
У вас $vr верное регулярное выражение? т.е. обрамляется символом "|" или "#" и т.д.?
"|sSlovo|"
P.S.
Возможно, это будет работать быстрее preg_replace:
http://ru2.php.net/manual/en/function.strlen.php->http://ru2.php.net/manual/en/function.strpos.php->http://ru2.php.net/manual/en/function.substr.php

Спустя 27 минут, 1 секунда (19.01.2009 - 14:34) FatCat написал(а):
А я бы по старинке...
PHP
$ra explode($vr,$ra);
$ra[0] .= $zam.$ra[1];
unset(
$ra[1]);
$ra implode($vr,$ra);

Спустя 57 минут, 14 секунд (19.01.2009 - 15:31) ferol написал(а):
Цитата (Sephiroth_Lukaw @ 19.01.2009 - 11:07)
У вас $vr верное регулярное выражение? т.е. обрамляется символом "|" или "#" и т.д.?
"|sSlovo|"
P.S.
Возможно, это будет работать быстрее preg_replace:
http://ru2.php.net/manual/en/function.strlen.php->http://ru2.php.net/manual/en/function.strpos.php->http://ru2.php.net/manual/en/function.substr.php

у меня $vr вообще не рег. выр. Поэтому я и не хочу пользоваться preg_replace. А искать в ручную совпадение, потом вычислять длину, вырезать и всавлять... слишком много операций лишних, имхо гораздо медленнее работать будет. Для меня скорость критична.
Цитата (FatCat @ 19.01.2009 - 11:34)
А я бы по старинке...
PHP
$ra = explode($vr,$ra);
$ra[0] .= $zam.$ra[1];
unset(
$ra[1]);
$ra = implode($vr,$ra);

Хорошая мысль! Спасибо, попробую!
Получилось!

Спустя 1 час, 59 минут, 36 секунд (19.01.2009 - 17:31) Guest написал(а):
А так сделать трудно $vr = '/' . $vr . '/si';

Спустя 2 минуты, 22 секунды (19.01.2009 - 17:33) modobaks написал(а):
или так
PHP
preg_replace'/' $vr '/si'$zam$ra,1);


Спустя 3 минуты, 4 секунды (19.01.2009 - 17:36) vasa_c написал(а):
Как ни странно, но у str_replace так же есть 4-й параметр.

Спустя 1 час, 7 минут, 50 секунд (19.01.2009 - 18:44) Sephiroth_Lukaw написал(а):
Цитата (vasa_c @ 19.01.2009 - 20:36)
Как ни странно, но у str_replace так же есть 4-й параметр.
Эм..А, что в данном случае, даст переменная, с кол-вом замен, сделанных str_replace'м? Или, здесь кто-то сказал, что у str_replace 3 параметра?0_0
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.