За последние 24 часа нас посетили 17611 программистов и 1313 роботов. Сейчас ищут 1146 программистов ...

Найти и заменить слово в строке

Тема в разделе "Регулярные выражения", создана пользователем segazav, 13 сен 2015.

  1. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Всем привет!

    Никак не могу составить регулярное выражения.
    Нужно в строке найти слово (без учета кавычек) "бу" или "б/у" и заменить его на "б у"
    Причем это слово может быть в конце, в середине, в начале строки.

    Мои варианты не работают:
    Код (Text):
    1. $slova = preg_replace("/\b(бу|б\/у)\b/i", "б у", $slova); // заменяем ненужные символы
    2. $slova = preg_replace("/b(бу|б\/у)b/i", "б у", $slova); // заменяем ненужные символы
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ниповезло.

    для работы с русскими буквами (юникодом) надо в регулярное выражение надо добавить модификатор u, что означает юникод:
    Код (Text):
    1. "/\b(бу|б\/у)\b/ui"
     
  3. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Выдает ошибку: preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 2
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    у тебя скрипт не UTF-8, переведи в UTF-8.
     
  5. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    У меня <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    Это получается всю страницу нужно делать в UTF-8 или можно только кусок кода?
     
  6. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Код (Text):
    1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     
  7. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    пхп на эту строчку глубоко всё равно. Переводить сам файл скрипта надо. Или преобразовать строку в utf8 перед использованием в preg_replace
     
  8. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    $slova = iconv ('windows-1251', 'utf-8', $slova);
    $slova = preg_replace("/\b(бу|б\/у)\b/ui", "б у", $slova);

    Все равно не работает, почему так?
     
  9. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    У самого файла поменяй кодировку на utf8.

    Код (PHP):
    1. $slova = "тут какая-то б/у хрень";
    2. $slova = preg_replace("/\b(бу|б\/у)\b/ui", "б у", $slova); // заменяем ненужные символы
    3. $slova = preg_replace("/b(бу|б\/у)b/ui", "б у", $slova); // заменяем ненужные символы
    4. $slova = iconv ('utf-8', 'windows-1251', $slova);