Adakah yang tahu cara yang sangat cepat untuk mengganti kemunculan terakhir string dengan string lain dalam string?
Adakah yang tahu cara yang sangat cepat untuk mengganti kemunculan terakhir string dengan string lain dalam string?
Jawaban:
Anda dapat menggunakan fungsi ini:
function str_lreplace($search, $replace, $subject)
{
$pos = strrpos($subject, $search);
if($pos !== false)
{
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
TRUE
apa pun yang terjadi. Ini mengembalikan string apa pun yang terjadi. Jika penggantian tidak dapat dilakukan maka akan mengembalikan yang asli $subject
, seperti substr_replace
dan str_replace
lakukan.
strpos — Find the position of the first occurrence of a substring in a string
- sunting: wow. Genius Php benar-benar membuat fungsi dipanggil strpos
dan strrpos
? Terima kasih ....
1-liner lain tetapi tanpa 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
Solusi yang agak ringkas berikut ini menggunakan pernyataan PCAH positif lookahead untuk mencocokkan kejadian terakhir dari substring yang menarik, yaitu, terjadinya substring yang tidak diikuti oleh kejadian lain dari substring yang sama. Jadi contoh menggantikan last 'fox'
dengan 'dog'
.
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!';
echo preg_replace('/(fox(?!.*fox))/', 'dog', $string);
KELUARAN:
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);
Anda bisa melakukan ini:
$str = 'Hello world';
$str = rtrim($str, 'world') . 'John';
Hasilnya adalah 'Hello John';
Salam
rtrim
tidak berperilaku seperti yang Anda pikirkan. Ini akan menghapus dari ujung karakter apa pun yang ada dalam string pencarian dalam urutan apa pun (dan selalu menambahkan penggantian), misalnya "Halo kata" -> "Hello John", "Hello lord" -> "Hello John", "Hello John", "Hello motor "->" Hello motJohn "," Hello worldy "->" Hello worldyJohn ".
Ini juga akan berfungsi:
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '(.*?)~', '$1' . $replace . '$2', $subject, 1);
}
UPDATE Versi yang lebih ringkas ( http://ideone.com/B8i4o ):
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
}
Ini adalah pertanyaan kuno, tetapi mengapa semua orang mengabaikan solusi berbasis regexp yang paling sederhana? Kuantitatif regexp normal serakah, orang-orang! Jika Anda ingin menemukan contoh terakhir dari suatu pola, cukup tempel .*
di depannya. Begini caranya:
$text = "The quick brown fox, fox, fox, fox, jumps over etc.";
$fixed = preg_replace("((.*)fox)", "$1DUCK", $text);
print($fixed);
Ini akan menggantikan instance terakhir dari "fox" menjadi "DUCK", seperti yang seharusnya, dan mencetak:
The quick brown fox, fox, fox, DUCK, jumps over etc.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
if($findChar !== FALSE) {
$string[$findChar]=".";
}
echo $string;
Terlepas dari kesalahan dalam kode, Faruk Unal memiliki server terbaik. Satu fungsi berfungsi.
Anda dapat menggunakan strrpos () untuk menemukan kecocokan terakhir.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
$string[$findChar]=".";
echo $string;
Output: picture_0007.value
Versi singkat:
$NewString = substr_replace($String,$Replacement,strrpos($String,$Replace),strlen($Replace));
Gunakan "$" pada ekspresi reg untuk mencocokkan akhir string
$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'
Untuk yang berminat: Saya telah menulis fungsi yang menggunakan preg_match sehingga Anda dapat mengganti dari sisi kanan menggunakan 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;
}
Atau sebagai kombinasi singkat / implementasi kedua opsi:
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;
}
berdasarkan https://stackoverflow.com/a/3835653/3017716 dan https://stackoverflow.com/a/23343396/3017716
s($str)->replaceLast($search, $replace)
bermanfaat, seperti yang ditemukan di perpustakaan mandiri ini .