Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Регистр букв preg_replace
Форумы портала PHP.SU » PHP » Регулярные выражения » Регистр букв preg_replace

Страниц (2): [1] 2 »
 

1. dimka888 - 03 Ноября, 2010 - 18:13:22 - перейти к сообщению
Добрый день. Такая проблема, необходимо заменить слова совпадающие в тексте. Очень странно получается. Вот код.
PHP:
скопировать код в буфер обмена
  1.  
  2. $text = ' Тест ТЕСТ ТеСТ тест ';
  3. $text = preg_replace('/(тест)/i', ' ЗАМЕНА ', $text);
  4.  
  5. echo $text;
  6.  


Выполняю код у себя на лоакальном сервере: denwer win php 5.2.11 у меня заменяет все слова.
Выполняю на сервере: linux php 5.2.11 у меня заменяет только последнее слово.

Помогите разобраться, необходимо сделать замену не чувствительную к регистру, т.е. все слова должны замениться.

PS я намеренно упростил пример.
2. Uchkuma - 03 Ноября, 2010 - 19:26:48 - перейти к сообщению
Попробуйте указать модификатор внутри границ шаблона
PHP:
скопировать код в буфер обмена
  1. preg_replace('/(?i)тест/', ' ЗАМЕНА ', $text);
3. dimka888 - 03 Ноября, 2010 - 19:33:48 - перейти к сообщению
Uchkuma пишет:
Попробуйте указать модификатор внутри границ шаблона

Тоже самое.
4. Uchkuma - 03 Ноября, 2010 - 19:37:19 - перейти к сообщению
Может покажете оригинальный шаблон?
5. dimka888 - 03 Ноября, 2010 - 20:08:23 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $text = ' слово СлОвО СлОВО СЛОВО ';
  3.  
  4. $text = preg_replace('/([«">. ]{1})(слово)([.,!?> ]{1})/i', '$1<a href="#">$2</a>$3', $text);
  5.  
  6. echo $text;
  7.  


Как то так.
6. dimka888 - 03 Ноября, 2010 - 23:09:35 - перейти к сообщению
Обнаружил что регулярки плохо работают с кириллицей. Пример, который я написал, прекрасно работает с латиницей, а вот с кириллицей не работает. Есть нормальное решение этой проблемы?
7. OrmaJever - 03 Ноября, 2010 - 23:45:44 - перейти к сообщению
мне кажется нужно просто убрать модификатор i. Он же включает регистронезависимость.

PHP:
скопировать код в буфер обмена
  1.  
  2. $text = ' Тест ТЕСТ ТеСТ тест ';
  3. $text = preg_replace('/(тест)/', ' ЗАМЕНА ', $text);
  4.  
  5. echo $text;


так должно полюбому заменить только последнее слово!

ЗЫ. Если известно точное слово которое нужно заменить толутше использовать str_replace()
8. dimka888 - 04 Ноября, 2010 - 00:25:08 - перейти к сообщению
OrmaJever пишет:


так должно полюбому заменить только последнее слово!

ЗЫ. Если известно точное слово которое нужно заменить толутше использовать str_replace()


Нет, вы не правы, должно заменить каждое соответствие шаблону. Оно правильно работает если использовать латиницу.

str_replace() - мне не подходит, т.к. у меня есть несколько условий поиска слова.
9. OverNik - 04 Ноября, 2010 - 00:34:15 - перейти к сообщению
Данные которые проходят обработку случайно не с другого сайта? Пересмотрите внимательно кодировку. А то в соседней теме подобная проблема была!
10. OrmaJever - 04 Ноября, 2010 - 13:05:08 - перейти к сообщению
dimka888 пишет:
Нет, вы не правы, должно заменить каждое соответствие шаблону.

Я говорил о конкретном случаи. Понятно что если совпадений будет больше то заменит все. Но на конкретном примере только последнее слово попадает под маску
11. dimka888 - 04 Ноября, 2010 - 15:11:59 - перейти к сообщению
OrmaJever Извините, забыл указать модификатора i. Поэтому должны замениться все слова. Так и происходит, если мы пишем только латиницу.

OverNik Да проблема не от где обрабатывается... а в том что даже в моем примере не работает правильно.
12. CenapaTop - 04 Ноября, 2010 - 15:38:25 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $text = ' Тест ТЕСТ ТеСТ тест ';
  2. $text = preg_replace('/(тест)/iu', ' ЗАМЕНА ', $text);
  3. echo $text;
13. dimka888 - 04 Ноября, 2010 - 15:48:52 - перейти к сообщению
CenapaTop пишет:
PHP:
скопировать код в буфер обмена
  1. $text = ' Тест ТЕСТ ТеСТ тест ';
  2. $text = preg_replace('/(тест)/iu', ' ЗАМЕНА ', $text);
  3. echo $text;


У меня кодировка cp1251.
14. OrmaJever - 04 Ноября, 2010 - 21:29:29 - перейти к сообщению
dimka888 пишет:
OrmaJever Извините, забыл указать модификатора i. Поэтому должны замениться все слова. Так и происходит, если мы пишем только латиницу.

оу извините я почему прочитал что нужно поставить регистронезависимость Закатив глазки

Но я немогу понять что может не работать? Я только что запустил у себя на локалхосте
PHP:
скопировать код в буфер обмена
  1. $text = ' Тест ТЕСТ ТеСТ тест ';
  2. $text = preg_replace('/(тест)/i', ' ЗАМЕНА ', $text);
  3.  
  4. echo $text;


и заменяет все слова. если убрать модификатор i то заменяет только последнее. Попробуйте перед preg_replace() поставить var_dump($text), может там текст другой?
15. dimka888 - 04 Ноября, 2010 - 22:30:44 - перейти к сообщению
OrmaJever Я же писал Улыбка на локалхосте под виндой и у меня работает все прекрасно. Загрузил скрипт на внешний сервер под linux и все, перестало работать. Вот в этом и заключается моя беда (
(Добавление)
Нашел решение проблемы Улыбка подсказали на другом форуме.
PHP:
скопировать код в буфер обмена
  1.  
  2. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
  3.  

 

Powered by ExBB FM 1.0 RC1