PHP заменить последнее вхождение строки в строке? - PullRequest
135 голосов
/ 01 октября 2010

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

Ответы [ 14 ]

1 голос
/ 23 января 2017

Вы можете использовать strrpos (), чтобы найти последнее совпадение.

$string = "picture_0007_value";
$findChar =strrpos($string,"_");

$string[$findChar]=".";

echo $string;

Вывод: picture_0007.value

0 голосов
/ 17 декабря 2018

Короткая версия:

$NewString = substr_replace($String,$Replacement,strrpos($String,$Replace),strlen($Replace));
0 голосов
/ 28 мая 2018

Для интересующихся: я написал функцию, которая использует preg_match, чтобы вы могли заменить с правой стороны, используя регулярное выражение.

function preg_rreplace($search, $replace, $subject) {
    preg_match_all($search, $subject, $matches, PREG_SET_ORDER);
    $lastMatch = end($matches);

    if ($lastMatch && false !== $pos = strrpos($subject, $lastMatchedStr = $lastMatch[0])) {
        $subject = substr_replace($subject, $replace, $pos, strlen($lastMatchedStr));
    }

    return $subject;
}

Или как сокращенная комбинация / реализация обоих вариантов:

function str_rreplace($search, $replace, $subject) {
    return (false !== $pos = strrpos($subject, $search)) ?
        substr_replace($subject, $replace, $pos, strlen($search)) : $subject;
}
function preg_rreplace($search, $replace, $subject) {
    preg_match_all($search, $subject, $matches, PREG_SET_ORDER);
    return ($lastMatch = end($matches)) ? str_rreplace($lastMatch[0], $replace, $subject) : $subject;
}

на основе https://stackoverflow.com/a/3835653/3017716 и https://stackoverflow.com/a/23343396/3017716

0 голосов
/ 19 августа 2014

Используйте «$» в выражении 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...