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]   

> Без описания
DukeNukem
Отправлено: 02 Октября, 2015 - 16:00:17
Post Id


Новичок


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


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




Всем привет. Есть несколько текстов:
Цитата:
слово1 слово2 слово4 слово6 слово7 слово9 слово10

Цитата:
слово1 слово2 слово3 слово5 слово6 слово22 слово30

Нужно заменить:
1) "слово1" на "другоеслово"
2) "слово2" на "ещеоднослово"
3) если "слово2" было заменено то замена прекращается.

Вот с третьим пунктом загвоздка. Код что накрапал:

PHP:
скопировать код в буфер обмена
  1.  
  2. function str_replace_once($search, $replace, $text)
  3. {
  4.    $pos = strpos($text, $search);
  5.    return $pos!==false ? substr_replace($text, $replace, $pos, strlen($search)) : $text;
  6. }
  7.            $replacecont = str_replace_once('слово1','<a href="/">слово1</a>',$replacecont);
  8.            $replacecont = str_replace_once('слово2 ','<a href=/>слово2</a> ',$replacecont);
  9.            $replacecont = str_replace_once('слово3 ','<a href=/>слово3</a> ',$replacecont);
  10.  


Вот если первая замена произошла, как остановить остальные?
 
 Top
andrewkard
Отправлено: 02 Октября, 2015 - 18:41:48
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




DukeNukem
Цитата:

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

str_replace
 
 Top
DukeNukem
Отправлено: 02 Октября, 2015 - 22:34:21
Post Id


Новичок


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


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




andrewkard пишет:
DukeNukem
Цитата:

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

str_replace

При этом решении произойдет каждая замена 1 раз. Мне же нужно чтобы после первой замены остальные не выполнялись
Как вариант проверять на $count==1 и goto в конец, но как то костыльно...
(Добавление)
Принято решение писать функцию что то типа
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function str_replace_once($search, $replacedo, $replacepos, $text)
  4. {
  5.    preg_match ('#(слово.)#is',$text,$needword);
  6.    $needword=$needword[1];
  7.    $replaceword=$replacedo.$needword . $replacepos
  8.    $str = str_replace("$needword", "$replaceword", $text, $count);
  9. }
  10.        

(Отредактировано автором: 02 Октября, 2015 - 22:37:43)

 
 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