답변:
이 기능을 사용할 수 있습니다 :
function str_lreplace($search, $replace, $subject)
{
$pos = strrpos($subject, $search);
if($pos !== false)
{
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
TRUE
무엇이든 반환하지 않습니다 . 그것은 무엇이든 문자열을 반환합니다. 교체를 할 수없는 경우는 원본을 반환 $subject
, 단지 같은 substr_replace
및 str_replace
않습니다.
strpos — Find the position of the first occurrence of a substring in a string
-편집 : 와우. PHP 천재는 실제로 strpos
and 라는 함수를 만들었습니다 strrpos
. 감사합니다 ....
$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
다음의 다소 컴팩트 한 솔루션은 PCRE 긍정 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!!!
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!'; echo preg_replace('/(fox(?!.*fox))/', 'dog', $string);
당신은 이것을 할 수 있습니다 :
$str = 'Hello world';
$str = rtrim($str, 'world') . 'John';
결과는 'Hello John'입니다.
문안 인사
이것은 또한 작동합니다 :
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);
}
이것은 고대의 질문이지만 왜 모두가 가장 간단한 정규식 기반 솔루션을 간과합니까? 정규 정규 표현식 수량자는 탐욕 스럽습니다. 패턴의 마지막 인스턴스를 찾으려면 패턴 .*
앞에 붙이 십시오. 방법은 다음과 같습니다.
$text = "The quick brown fox, fox, fox, fox, jumps over etc.";
$fixed = preg_replace("((.*)fox)", "$1DUCK", $text);
print($fixed);
다음 과 같이 "fox" 의 마지막 인스턴스를 "DUCK"로 바꾸고 인쇄합니다.
The quick brown fox, fox, fox, DUCK, jumps over etc.
$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'
관심을 끌기 위해 : 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 기반
s($str)->replaceLast($search, $replace)
있는 것처럼 도움 이 될 수 있습니다 .