Кто-нибудь знает очень быстрый способ заменить последнее вхождение строки другой строкой в строке?
Вы можете использовать эту функцию:
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'