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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регистр букв preg_replace

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
dimka888
Отправлено: 03 Ноября, 2010 - 18:13:22
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Добрый день. Такая проблема, необходимо заменить слова совпадающие в тексте. Очень странно получается. Вот код.
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 я намеренно упростил пример.

(Отредактировано автором: 03 Ноября, 2010 - 18:27:05)

 
 Top
Uchkuma
Отправлено: 03 Ноября, 2010 - 19:26:48
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




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


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Uchkuma пишет:
Попробуйте указать модификатор внутри границ шаблона

Тоже самое.
 
 Top
Uchkuma
Отправлено: 03 Ноября, 2010 - 19:37:19
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Может покажете оригинальный шаблон?
 
 Top
dimka888
Отправлено: 03 Ноября, 2010 - 20:08:23
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $text = ' слово СлОвО СлОВО СЛОВО ';
  3.  
  4. $text = preg_replace('/([«">. ]{1})(слово)([.,!?> ]{1})/i', '$1<a href="#">$2</a>$3', $text);
  5.  
  6. echo $text;
  7.  


Как то так.
 
 Top
dimka888
Отправлено: 03 Ноября, 2010 - 23:09:35
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Обнаружил что регулярки плохо работают с кириллицей. Пример, который я написал, прекрасно работает с латиницей, а вот с кириллицей не работает. Есть нормальное решение этой проблемы?
 
 Top
OrmaJever
Отправлено: 03 Ноября, 2010 - 23:45:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




мне кажется нужно просто убрать модификатор i. Он же включает регистронезависимость.

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


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

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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
dimka888
Отправлено: 04 Ноября, 2010 - 00:25:08
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




OrmaJever пишет:


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

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


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

str_replace() - мне не подходит, т.к. у меня есть несколько условий поиска слова.

(Отредактировано автором: 04 Ноября, 2010 - 00:25:57)

 
 Top
OverNik
Отправлено: 04 Ноября, 2010 - 00:34:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




Данные которые проходят обработку случайно не с другого сайта? Пересмотрите внимательно кодировку. А то в соседней теме подобная проблема была!
 
 Top
OrmaJever
Отправлено: 04 Ноября, 2010 - 13:05:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




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

Я говорил о конкретном случаи. Понятно что если совпадений будет больше то заменит все. Но на конкретном примере только последнее слово попадает под маску


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
dimka888
Отправлено: 04 Ноября, 2010 - 15:11:59
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




OrmaJever Извините, забыл указать модификатора i. Поэтому должны замениться все слова. Так и происходит, если мы пишем только латиницу.

OverNik Да проблема не от где обрабатывается... а в том что даже в моем примере не работает правильно.
 
 Top
CenapaTop
Отправлено: 04 Ноября, 2010 - 15:38:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009  


Помог: 1 раз(а)




PHP:
скопировать код в буфер обмена
  1. $text = ' Тест ТЕСТ ТеСТ тест ';
  2. $text = preg_replace('/(тест)/iu', ' ЗАМЕНА ', $text);
  3. echo $text;
 
 Top
dimka888
Отправлено: 04 Ноября, 2010 - 15:48:52
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




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


У меня кодировка cp1251.
 
 Top
OrmaJever
Отправлено: 04 Ноября, 2010 - 21:29:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




dimka888 пишет:
OrmaJever Извините, забыл указать модификатора i. Поэтому должны замениться все слова. Так и происходит, если мы пишем только латиницу.

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

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


и заменяет все слова. если убрать модификатор i то заменяет только последнее. Попробуйте перед preg_replace() поставить var_dump($text), может там текст другой?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
dimka888
Отправлено: 04 Ноября, 2010 - 22:30:44
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




OrmaJever Я же писал Улыбка на локалхосте под виндой и у меня работает все прекрасно. Загрузил скрипт на внешний сервер под linux и все, перестало работать. Вот в этом и заключается моя беда (
(Добавление)
Нашел решение проблемы Улыбка подсказали на другом форуме.
PHP:
скопировать код в буфер обмена
  1.  
  2. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
  3.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB