1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

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

Тема в разделе "Web Coding", создана пользователем Antroplag, 15 авг 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Antroplag

    Antroplag Постоялец

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

    Добавлено через 32 минуты
    Вобщем разобрался. У кого будут схожие проблемы, курить это:
    _ttp://php.spb.ru/php/regexp.html
     
  2. HappyWorld

    HappyWorld Постоялец

    Регистр.:
    19 июл 2007
    Сообщения:
    83
    Симпатии:
    16
    меньше курить нужно ;)
    тут регулярки - как из пушки по воробьям.
    читаем до просветления строковые функции.
    для любителей готовых решений str-replace
    strtr
     
  3. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Код:
    $text = 'Иванов, иванов и Петров';
    $text = str_replace('Иванов', 'Сидоров', $text);
    $text = str_replace('иванов', 'Сидоров', $text);
    echo $text; //Сидоров, Сидоров и Петров
    
    :)
     
  4. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Полностью согласен с предыдущими ораторами, кроме того, что регулярки здесь излишний функционал, они еще и работают медленнее чем str_replace.
    Всегда нужно обращать внимание на производительность скрипта, чтобы потом не ломать голову отчего же тормозит.
    Кроме того, все действия с манипуляцией строковыми переменными лучше производить с как можно меньшими строками.
    Данная тема была затронута так-же здесь.
    h**p://www.nulled.ws/showthread.php?t=23619
     
  5. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Это не Нафаня писал, хотя Нафаня согласен с этим тоже ;)
     
  6. basse

    basse Прохожие

    Для Nafania.
    Только ты забыл про "иванова". str_replace тут не пройдёт. Да и поиск у тебя 2 раза по 'Иванов' и 'иванов'.
    Ещё не факт, что быстрее получится. Так что нечего извращяться, тут регулярки нужны.
    $s = "Иванов Иванова тест Иванович иванов";
    $pattern = "/(\bИванов\b)/i";
    echo preg_replace($pattern, "www", $s);
     
  7. HeeL

    HeeL Создатель

    Регистр.:
    15 май 2006
    Сообщения:
    39
    Симпатии:
    5
    Почему же, вполне можно воспользоваться функцией str_replace(). Задача гласит, что требуется заменять строку типа "Иванов", но не "Ивановна", к примеру.
    Таким образом, мы можем добавить в конце пробел, точку, запятую, еще пару символов можно и все.
    Получается строчек пять в итоге. Если символов наберется много, можно их в массив записать и в цикле прогонять, компактно и наглядно будет.

    К примеру так:
    $replace = array('!', ',', '.', ';');
     
  8. Antroplag

    Antroplag Постоялец

    Регистр.:
    16 апр 2007
    Сообщения:
    103
    Симпатии:
    32
    Господа, задача решилась одной строкой кода, т.е. регулярным выражением. Зачем что-то городить из str_replace?
    Производительность скрипта (читай скорость работы :)) меня устраивает полностью. Зачем излишний головняк?
     
  9. kalabro

    kalabro Постоялец

    Регистр.:
    11 авг 2007
    Сообщения:
    74
    Симпатии:
    6
    Ну а если текст такой:
    Код:
    Иванов, Петров, иванов!
    
    то ни разу не выполнится условие вашего патерна(нет пробелов с двух сторон), та к что не понимаю. Объясните :ah:
     
  10. basse

    basse Прохожие

    \b - это не пробел. Это разделитель. Между буквами-цифрами и всем остальным. Так что всё сработает)) Запятая как раз и есть "всё остальное".
    Ну и на всякий: i после слеша - означает, что поиск не будет зависеть от регистра.
     
Статус темы:
Закрыта.