замена (поиск) строки1 в строке2 без учета регистра

Fobos

Новичок
замена (поиск) строки1 в строке2 без учета регистра

Добрый день всем.

Столкнулся с проблемой регистронезависимого поиска и замены строки1 в строке2.

Например есть:
PHP:
$str1 = "сЛоВо";
$str2 = "Слово слово СЛОВО СлоВО";
Мне нужен алгоритм поиска (замены) вхождения, при котором:
1. В $str2 при ключевом слове поиска $str1 будут найдены все слова (т.е. независимо от регистров символов $str1);
2. В $str2 будет произведена замена:
PHP:
echo $newstr2; // Prints "[U]Слово[/U] [U]слово[/U] [U]СЛОВО[/U] [U]СлоВО[/U]";
(с подчеркиванием)

Может ли кто надоумить в каком направлении двигаться?
Заранее благодарен.
 

Fobos

Новичок
А с какой версии PHP работает первая функция?
На версии 4.4.4 скрипт пишет Fatal error: Call to undefined function: str_ireplace();

Нашел в мануале. Только в PHP5 работает
 

Fobos

Новичок
А функция
PHP:
$word = "слово";
$string = "Слово СЛОВО слово СлОвО";
echo preg_replace($string,"Замена",$word)."<br>";
выдает пустоту. Что я неверно делаю?
 

Андрейка

Senior pomidor developer
не знаю... в мануале ж порядок аргументов функции не написан :( а уж про то, как регулярное выражение написать вообще тишина :(
 

Fobos

Новичок
Не заметил сразу иронии.
Я не силен в английском, потому иногда по мануалу не так понимаю значения параметров.

А в регулярных выражениях я не разбираюсь.
 

rasfast

Новичок
попробуй
PHP:
preg_replace('/' . $word . '/i', 'Замена', $string);
точнее даже так:
PHP:
preg_replace('/' . preg_quote($word, '/') . '/i', 'Замена', $string);
 

Fobos

Новичок
Прошу прощения, но я имел ввиду не только функции.
Может некорректно выразился.

Меня интересуют все методы, включая и регулярные выражения.

-~{}~ 19.10.06 16:09:

Автор оригинала: rasfast
точнее даже так:
PHP:
preg_replace('/' . preg_quote($word, '/') . '/i', 'Замена', $string);

И вот теперь я увидел результаты функции - она выделила только то слово в $str2, которое было написано таким же регистром как и $str1 :(

Нужно выделить все.
 

Fobos

Новичок
Добрый день всем.
Разобрался с регулярными выражениями на достаточном уровне для решения этой задачи. Или недостаточном.

Вот код решения:
PHP:
$newstr = preg_replace("/(".$word.")/i","замена!!!",$string);
Единственное что, все замечательно работает, когда текст строки и слова находится в кодировке win-1251. Если текст и строка в utf-8 - регистронезависимость регулярного выражения пропадает.

Кто-то с этим может помочь?
Заранее благодарен.
 

Wicked

Новичок
попробуй 'u' modifier:
u (PCRE_UTF8)
This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern strings are treated as UTF-8. This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32. UTF-8 validity of the pattern is checked since PHP 4.3.5
 

Fobos

Новичок
Огромное спасибо!
Вроде получилось.

Функция в этом случае принимает вид:
PHP:
$newstr = preg_replace("/(".$word.")/iu","замена!!!",$string);
 
Сверху