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 :: Версия для печати :: Заменить первое вхождение и остановить выполнение
Форумы портала PHP.SU » PHP » Регулярные выражения » Заменить первое вхождение и остановить выполнение

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

1. DukeNukem - 02 Октября, 2015 - 16:00:17 - перейти к сообщению
Всем привет. Есть несколько текстов:
Цитата:
слово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.  


Вот если первая замена произошла, как остановить остальные?
2. andrewkard - 02 Октября, 2015 - 18:41:48 - перейти к сообщению
DukeNukem
Цитата:

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

str_replace
3. DukeNukem - 02 Октября, 2015 - 22:34:21 - перейти к сообщению
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.        

 

Powered by ExBB FM 1.0 RC1