PHP Замените последнее вхождение строки в строку?

Кто-нибудь знает очень быстрый способ заменить последнее вхождение строки другой строкой в ​​строке?

Вы можете использовать эту функцию:

 function str_lreplace($search, $replace, $subject) { $pos = strrpos($subject, $search); if($pos !== false) { $subject = substr_replace($subject, $replace, $pos, strlen($search)); } return $subject; } 

Другой 1-лайнер, но без preg:

 $subject = 'bourbon, scotch, beer'; $search = ','; $replace = ', and'; echo strrev(implode(strrev($replace), explode(strrev($search), strrev($subject), 2))); //output: bourbon, scotch, and beer 
 $string = 'this is my world, not my world'; $find = 'world'; $replace = 'farm'; $result = preg_replace(strrev("/$find/"),strrev($replace),strrev($string),1); echo strrev($result); //output: this is my world, not my farm 

Вы можете сделать это:

 $str = 'Hello world'; $str = rtrim($str, 'world') . 'John'; 

Результат: «Привет, Джон»;

С уважением

Следующее довольно компактное решение использует утверждение PCRE positive lookahead для соответствия последнему вхождению интересующей подстроки, то есть появлению подстроки, за которой не следуют какие-либо другие вхождения одной и той же подстроки. Таким образом, пример заменяет last 'fox' на 'dog' .

 $string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!'; echo preg_replace('/(fox(?=.*fox.*))/', 'dog', $string); 

ВЫВОД:

 The quick brown fox, fox, fox jumps over the lazy dog!!! 

Это также будет работать:

 function str_lreplace($search, $replace, $subject) { return preg_replace('~(.*)' . preg_quote($search, '~') . '(.*?)~', '$1' . $replace . '$2', $subject, 1); } 

ОБНОВЛЕНИЕ Немного более сжатая версия ( http://ideone.com/B8i4o ):

 function str_lreplace($search, $replace, $subject) { return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1); } 

Только одна строка кода (поздний ответ, но стоит добавить его):

 $string = 'The quick brown fox jumps over the lazy dog'; $find_me = 'dog'; preg_replace('/'. $find_me .'$/', '', $string); 

конец $ указывает конец строки.

Вы можете использовать strrpos () для поиска последнего совпадения.

 $string = "picture_0007_value"; $findChar =strrpos($string,"_"); echo $string[$MyURL]="."; echo $string; 

Выход: picture_0007.value

 $string = "picture_0007_value"; $findChar =strrpos($string,"_"); if($findChar !== FALSE) { $string[$findChar]="."; } echo $string; 

Помимо ошибок в коде, у Faruk Unal есть лучший собеседник. Одна функция выполняет трюк.

Используйте «$» в выражении reg для соответствия концу строки

 $string = 'The quick brown fox jumps over the lazy fox'; echo preg_replace('/fox$/', 'dog', $string); //output 'The quick brown fox jumps over the lazy dog'