Регулярные
$string=preg_replace($str,"<b style='color:red'>\\0",$string);};
В данном случае заменяеться строгое совпадение, например строка=строка. Мне нужно чтоб замена была не строгая, например $need_string=строк, а заменяло слово строка.
Пишу
$str="'".$need_string.".{0,2}[\b]'";
но тогда вообще не заменяет, не находит строку, где я допускаю ошибку?
И второй вопрос
$str="'".$need_string.".{0,2}[\b]/i'"; - эта строка тоже не работает... почему?
Не работает что? Скрипт? Есть два решения проблемы - либо сервер не поддерживает CGI либо не туда скрипт на пхп кладешь! Читай мануал на своем хостинге!
Не корректно работает функция preg_match(). Не обращает внимания на параметр i.
Не корректно работает функция preg_match(). Не обращает внимания на параметр i.
как же оно будет обращать внимание на него если он не находится за ограничителем рэгэкспа?
нужно так -
"/$need_str{0,2}[\b]/i",
а у тебя так -
"'$need_str{0,2}[\b]/i'", в данном случае это просто символ слэша, кавычка тоже может быть ограничителем
как же оно будет обращать внимание на него если он не находится за ограничителем рэгэкспа?
нужно так -
"/$need_str{0,2}[\b]/i",
а у тебя так -
"'$need_str{0,2}[\b]/i'", в данном случае это просто символ слэша, кавычка тоже может быть ограничителем
Вот эта строка у меня работает на локалхосте
"/".$arr_str[$i].".{0,2}\b/i", а на хостинге нет.
На хостинге работает тока так
"/".$arr_str[$i]."\b/"
Вот эта строка у меня работает на локалхосте
"/".$arr_str[$i].".{0,2}\b/i", а на хостинге нет.
На хостинге работает тока так
"/".$arr_str[$i]."\b/"
"/$need_str[\w\d]{0,2}\b/i" - короче такое тебе подойдет, тут сам определяешь кол. символов после нужной строки до конца слова
"/$need_str[\w\d]*?\b/i" - или такое, а здесь все символы до конца слова
"/$need_str[\w\d]{0,2}\b/i" - короче такое тебе подойдет, тут сам определяешь кол. символов после нужной строки до конца слова
"/$need_str[\w\d]*?\b/i" - или такое, а здесь все символы до конца слова
Не работает...:( Мне интересно может ли это быть из-за настроек php.ini или на хосте криво поставили пхп? или еще что, подскажите чтоб я мог звонить хостеру и ругаться, кстати еще не работает strtolower для русских букв, но выход я из этого нашел, свою функцию написал, но preg_replace писать не охота...
Не работает...:( кстати еще не работает strtolower для русских букв,
локаль?
Не работает...:( Мне интересно может ли это быть из-за настроек php.ini или на хосте криво поставили пхп? или еще что, ........
Сомневаюсь что дело в хостере или пхп, может быть логическая ошибка в скрипте, хотя ...в наше время многому можно не удивлятся, я так думаю тебе туда позвонить или написать нужно в любом случае и те вопросы которые ты тут задешь задать им
локаль?
Да скорей всего проблема в локали, как можно из этого выкрутиться?
Да скорей всего проблема в локали, как можно из этого выкрутиться?
Локаль - вряд ли. На линухах такой траблы не должно быть точно. Там и локаль меняется с тычка, без перезагруза.
Не встречался с такой проблемой, не смотря на то, что работал на русских, немецких, швейцарских и норвежских серверах с одними и теми же регулярными.
Происходит что? функция регекспа возвращает все время false? Можешь кинуть достаточный кусок кода, чтобы я мог отдебагить.
Локаль - вряд ли. На линухах такой траблы не должно быть точно. Там и локаль меняется с тычка, без перезагруза.
Не встречался с такой проблемой, не смотря на то, что работал на русских, немецких, швейцарских и норвежских серверах с одними и теми же регулярными.
Происходит что? функция регекспа возвращает все время false? Можешь кинуть достаточный кусок кода, чтобы я мог отдебагить.
Что меня наводит о мысли о локали - не работает функция strtolower() с русскими буквами, соответственно не работает preg_replace с параметром i, т.к. не понимает русских букв.
Фунгкция регекспа вооще ничего не делает.
И есл нужно код:
$string - любой текст
$arr_str - текст типа
программирование|PHP|srttoloer
$arr_str=explode("|",$arr_str);
$i=0;
$count_arr=count($arr_str);
for($i;$i<$count_arr;$i++){
$str="'".$arr_str[$i].".{0,2}[\b]'";
$string=preg_replace("/".$arr_str[$i].".{0,2}\b/i","<b style='color:red'>\\0",$string);};
return $string;
};
Была у меня напоминающая эту ситуация. Пытался сделать поиск. Я просто поменял сервер, т.е. хостера на нормального.
И есл нужно код:
$string - любой текст
$arr_str - текст типа
программирование|PHP|srttoloer
$arr_str=explode("|",$arr_str);
$i=0;
$count_arr=count($arr_str);
for($i;$i<$count_arr;$i++){
$str="'".$arr_str[$i].".{0,2}[\b]'";
$string=preg_replace("/".$arr_str[$i].".{0,2}\b/i","<b style='color:red'>\\0",$string);};
return $string;
};
по поводу функции, красивше так:
function search_fenyx($string,$arr_str)
{
$arr_str = explode("|",$arr_str);
foreach($arr_str as $str)
{
$string = preg_replace("/$str.*?\b/i","<b style='color:red'>\\0",$string);
}
return $string;
}
потом, а если $arr_str будет - red|color, знаешь что будет?
Да скорей всего проблема в локали, как можно из этого выкрутиться?
string setlocale ( mixed category, string locale [, string ...])
string setlocale ( mixed category, string locale [, string ...])
И снова проблема :)
$str="Привет МИР";
echo strtolower($str);
Выводит - привет миР
Все разобрался setlocale(LC_ALL, 'ru_RU.CP1251');
И снова проблема :)
$str="Привет МИР";
echo strtolower($str);
Выводит - привет миР
Все разобрался setlocale(LC_ALL, 'ru_RU.CP1251');
Так по сабжу - локаль то была или где? Самому интересно, да и народ, бродя по сети и натыкиваясь на топик останется в недоумениях...
Так по сабжу - локаль то была или где? Самому интересно, да и народ, бродя по сети и натыкиваясь на топик останется в недоумениях...
Да яркий пример локали
В начале функции/скрипта поставил setlocale(LC_ALL, 'ru_RU.CP1251'); и все заработало да не только с русскими буквами, но еще и с украинскими :)
Самое тяжелое было найти вот этот параметр 'ru_RU.CP1251', в мануале я его не нашел
а как же решил проблему замены?
preg_replace? Все оказалось оочень просто, подставил локаль и проблемы не стало.... :)
preg_replace? Все оказалось оочень просто, подставил локаль и проблемы не стало.... :)
не я о другом, есть у тебя строка "red bool" и есть строка поиска "red|b", так как у тебя строка одна и та же, замена будет постоянно находить слово red так как оно находится в строке замены в стиле и b тоже
не я о другом, есть у тебя строка "red bool" и есть строка поиска "red|b", так как у тебя строка одна и та же, замена будет постоянно находить слово red так как оно находится в строке замены в стиле и b тоже
Будем считать это фичей :D , подумаю на досуге...