Câu trả lời:
Bạn có thể sử dụng chức năng này:
function str_lreplace($search, $replace, $subject)
{
$pos = strrpos($subject, $search);
if($pos !== false)
{
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
TRUE
bất kể điều gì. Nó trả về một chuỗi bất kể điều gì. Nếu một sự thay thế không thể được thực hiện, nó sẽ trả về bản gốc $subject
, giống như substr_replace
và str_replace
làm.
strpos — Find the position of the first occurrence of a substring in a string
- chỉnh sửa: wow. Php thiên tài thực sự đã thực hiện một chức năng được gọi là strpos
và strrpos
? Cảm ơn ....
Một lớp lót khác nhưng không có 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
Giải pháp khá nhỏ gọn sau đây sử dụng xác nhận tìm kiếm tích cực PCRE để khớp với lần xuất hiện cuối cùng của chuỗi con quan tâm, nghĩa là sự xuất hiện của chuỗi con không theo sau bởi bất kỳ sự xuất hiện nào khác của cùng một chuỗi con. Do đó, ví dụ thay thế last 'fox'
bằng 'dog'
.
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!';
echo preg_replace('/(fox(?!.*fox))/', 'dog', $string);
ĐẦU RA:
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);
Bạn có thể làm điều này:
$str = 'Hello world';
$str = rtrim($str, 'world') . 'John';
Kết quả là 'Xin chào John';
Trân trọng
rtrim
không hành xử theo cách bạn nghĩ. Nó sẽ loại bỏ từ cuối bất kỳ ký tự nào tồn tại trong chuỗi tìm kiếm theo bất kỳ thứ tự nào (và luôn nối thêm từ thay thế), ví dụ: "Xin chào từ" -> "Xin chào John", "Xin chào chúa" -> "Xin chào John", "Xin chào motor "->" Xin chào motJohn "," Xin chào worldy "->" Xin chào worldyJohn ".
Điều này cũng sẽ làm việc:
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '(.*?)~', '$1' . $replace . '$2', $subject, 1);
}
CẬP NHẬT Phiên bản ngắn gọn hơn một chút ( http://ideone.com/B8i4o ):
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
}
Đây là một câu hỏi cổ xưa, nhưng tại sao mọi người lại nhìn ra giải pháp dựa trên cơ chế regrec đơn giản nhất? Bình thường định lượng regrec là tham lam, mọi người! Nếu bạn muốn tìm ví dụ cuối cùng của một mẫu, chỉ cần dán .*
trước mẫu đó. Đây là cách thực hiện:
$text = "The quick brown fox, fox, fox, fox, jumps over etc.";
$fixed = preg_replace("((.*)fox)", "$1DUCK", $text);
print($fixed);
Điều này sẽ thay thế ví dụ cuối cùng của "con cáo" thành "Ducks", giống như nó được yêu cầu và in:
The quick brown fox, fox, fox, DUCK, jumps over etc.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
if($findChar !== FALSE) {
$string[$findChar]=".";
}
echo $string;
Ngoài những sai lầm trong mã, Faruk Unal có anwser tốt nhất. Một chức năng thực hiện các mẹo.
Một phiên bản ngắn:
$NewString = substr_replace($String,$Replacement,strrpos($String,$Replace),strlen($Replace));
Sử dụng "$" trên biểu thức reg để khớp với phần cuối của chuỗi
$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'
Đối với người quan tâm: Tôi đã viết một hàm sử dụng preg_match để bạn có thể thay thế từ phía bên tay phải bằng regex.
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;
}
Hoặc như một sự kết hợp tốc độ / thực hiện của cả hai tùy chọn:
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;
}
dựa trên https://stackoverflow.com/a/3835653/3017716 và https://stackoverflow.com/a/23343396/3017716
s($str)->replaceLast($search, $replace)
hữu ích, như được tìm thấy trong thư viện độc lập này .