Помогите, пожалуйста, с заменой.

Статус
В этой теме нельзя размещать новые ответы.

Antroplag

Постоялец
Регистрация
16 Апр 2007
Сообщения
99
Реакции
33
Доброго времени суток, уважаемые форумчане! Вопрос обращен к PHP кодерам, но буду рад любой помощи.
Стала такая проблема:
К примеру возмем слово Иванов.
Нужно в тексте заменить слово Иванов, но чтоб замена не коснулась слов Иванова, Иванович.
И сразу такой вопрос - как мне заменить в тексте и слово Иванов и слово иванов.
Спасибо всем откликнувшимся!:)

Добавлено через 32 минуты
Вобщем разобрался. У кого будут схожие проблемы, курить это:
_ttp://php.spb.ru/php/regexp.html
 
курить это:
_ttp://php.spb.ru/php/regexp.html
меньше курить нужно ;)
тут регулярки - как из пушки по воробьям.
читаем до просветления Для просмотра ссылки Войди или Зарегистрируйся.
для любителей готовых решений Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Код:
$text = 'Иванов, иванов и Петров';
$text = str_replace('Иванов', 'Сидоров', $text);
$text = str_replace('иванов', 'Сидоров', $text);
echo $text; //Сидоров, Сидоров и Петров
:)
 
тут регулярки - как из пушки по воробьям.
Полностью согласен с предыдущими ораторами, кроме того, что регулярки здесь излишний функционал, они еще и работают медленнее чем str_replace.
Всегда нужно обращать внимание на производительность скрипта, чтобы потом не ломать голову отчего же тормозит.
Кроме того, все действия с манипуляцией строковыми переменными лучше производить с как можно меньшими строками.
Данная тема была затронута так-же здесь.
h**p://www.nulled.ws/showthread.php?t=23619
 
Для Nafania.
Только ты забыл про "иванова". str_replace тут не пройдёт. Да и поиск у тебя 2 раза по 'Иванов' и 'иванов'.
Ещё не факт, что быстрее получится. Так что нечего извращяться, тут регулярки нужны.
$s = "Иванов Иванова тест Иванович иванов";
$pattern = "/(\bИванов\b)/i";
echo preg_replace($pattern, "www", $s);
 
Почему же, вполне можно воспользоваться функцией str_replace(). Задача гласит, что требуется заменять строку типа "Иванов", но не "Ивановна", к примеру.
Таким образом, мы можем добавить в конце пробел, точку, запятую, еще пару символов можно и все.
Получается строчек пять в итоге. Если символов наберется много, можно их в массив записать и в цикле прогонять, компактно и наглядно будет.

К примеру так:
$replace = array('!', ',', '.', ';');
 
Господа, задача решилась одной строкой кода, т.е. регулярным выражением. Зачем что-то городить из str_replace?
Производительность скрипта (читай скорость работы :)) меня устраивает полностью. Зачем излишний головняк?
 
$s = "Иванов Иванова тест Иванович иванов";
$pattern = "/(\bИванов\b)/i";
echo preg_replace($pattern, "www", $s);
Ну а если текст такой:
Код:
Иванов, Петров, иванов!
то ни разу не выполнится условие вашего патерна(нет пробелов с двух сторон), та к что не понимаю. Объясните :ah:
 
\b - это не пробел. Это разделитель. Между буквами-цифрами и всем остальным. Так что всё сработает)) Запятая как раз и есть "всё остальное".
Ну и на всякий: i после слеша - означает, что поиск не будет зависеть от регистра.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху