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 :: Замена текста

 PHP.SU

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


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

> Без описания
KsenZ
Отправлено: 10 Мая, 2012 - 13:07:17
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2012  


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




Всем привет. Есть небольшая проблема по замене текста в файле.
Суть проблемы:
Есть файл примерно такого содержания:
333 | 2
3333 | 3
4333 | 8
5333 | 2
6333 | 25
7333 | 18

Мне нужно заменить 333 на например 222, т.е. получить на выходе измененный файл такого вида:
222 | 2
3333 | 3
4333 | 8
5333 | 2
6333 | 25
7333 | 18

соответственно делаю:
str_replace(333, 222, $file);
Но меняется не только первая строка, но и все вхождения, т.е. получается вот так:
222 | 2
3222 | 3
4222 | 8
5222 | 2
6222 | 25
7222 | 18

Как указать чтобы менялось точное совпадение, т.е. именно 333, а не все вхождения с данной последовательностью цифр?
 
 Top
vitaliy_mad
Отправлено: 10 Мая, 2012 - 13:16:40
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




PHP:
скопировать код в буфер обмена
  1. $a="333 , 4333, 3334"; $a=preg_replace('/333(?: )/','222',$a);echo "$a\n";
  2.  

 
 Top
KsenZ
Отправлено: 10 Мая, 2012 - 15:36:14
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2012  


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




vitaliy_mad пишет:
PHP:
скопировать код в буфер обмена
  1. $a="333 , 4333, 3334"; $a=preg_replace('/333(?: )/','222',$a);echo "$a\n";
  2.  



Не корректно отрабатывает если не стоит пробела после 333, т.е. не меняет.

PHP:
скопировать код в буфер обмена
  1. $a="333, 4333, 3334";
  2. $a=preg_replace('/\b333\b/','222',$a);
  3. echo "$a\n";

Так вроде нормально работает.
 
 Top
lemo
Отправлено: 10 Мая, 2012 - 21:11:52
Post Id



Забанен


Покинул форум
Сообщений всего: 11
Дата рег-ции: Март 2012  


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




регулярками...
 
 Top
Bio man
Отправлено: 10 Мая, 2012 - 21:21:44
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




PHP:
скопировать код в буфер обмена
  1. $rgLines = file('tratata');
  2. $rgLines[0] = str_replace('333', '222', $rgLines[0]);
  3. var_dump($rgLines);

(Отредактировано автором: 10 Мая, 2012 - 21:21:56)

 
 Top
sKaa
Отправлено: 10 Мая, 2012 - 21:27:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


Я бы предложил strtr
(Добавление)
lemo пишет:
регулярками...
Регулярные выражения тут как минимум не рациональны в плане потребления ресурсов!
 
 Top
Bio man
Отправлено: 10 Мая, 2012 - 21:37:31
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




sKaa, да, strtr тут будет рациональней чем *_replace
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB