Herkes bir dize son kez bir dize başka bir dize ile değiştirmek için çok hızlı bir yol biliyor musunuz?
Herkes bir dize son kez bir dize başka bir dize ile değiştirmek için çok hızlı bir yol biliyor musunuz?
Yanıtlar:
Bu işlevi kullanabilirsiniz:
function str_lreplace($search, $replace, $subject)
{
$pos = strrpos($subject, $search);
if($pos !== false)
{
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
TRUEolursa olsun geri dönmez . Ne olursa olsun bir dize döndürür. Bir değiştirme yapılamıyorsa orijinali döndürür $subject, tıpkı beğen substr_replace ve str_replaceyap.
strpos — Find the position of the first occurrence of a substring in a string- düzenle: vay. Php dehaları gerçekten denilen bir işlev yaptı strposve strrpos? Teşekkürler ....
Başka bir 1-astar ama preg olmadan:
$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
Aşağıdaki oldukça kompakt çözüm , ilgilenilen alt dizenin son oluşumunu, yani aynı alt dizenin başka herhangi bir örneğini izlemeyen alt dizinin bir oluşumunu eşleştirmek için PCRE pozitif ileriye dönük iddiasını kullanır . Bu nedenle, örneğin yerine last 'fox'ile'dog' .
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!';
echo preg_replace('/(fox(?!.*fox))/', 'dog', $string);
ÇIKTI:
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);
Bunu yapabilirsin:
$str = 'Hello world';
$str = rtrim($str, 'world') . 'John';
Sonuç 'Merhaba John';
Saygılarımızla
rtrimdüşündüğünüz gibi davranmıyor. Arama dizesinde var olan karakterleri hangi sırada olursa olsun (ve her zaman değiştirmeyi ekler), örneğin "Merhaba kelime" -> "Merhaba John", "Merhaba efendim" -> "Merhaba John", "Merhaba motor "->" Merhaba motJohn "," Merhaba dünyevi "->" Merhaba worldyJohn ".
Bu da işe yarayacaktır:
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '(.*?)~', '$1' . $replace . '$2', $subject, 1);
}
GÜNCELLEME Biraz daha özlü sürüm ( http://ideone.com/B8i4o ):
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
}
Bu eski bir soru, ama neden herkes en basit normal ifadeye dayalı çözümü gözden kaçırıyor? Normal regexp niceleyicileri açgözlü, insanlar! Bir desenin son örneğini bulmak istiyorsanız .*, önüne yapıştırın . Bunu nasıl yapacağınız aşağıda açıklanmıştır:
$text = "The quick brown fox, fox, fox, fox, jumps over etc.";
$fixed = preg_replace("((.*)fox)", "$1DUCK", $text);
print($fixed);
Bu , "tilki" nin son örneğinin olması gerektiği gibi "ÖRDEK" olarak değiştirilir ve yazdırılır:
The quick brown fox, fox, fox, DUCK, jumps over etc.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
if($findChar !== FALSE) {
$string[$findChar]=".";
}
echo $string;
Koddaki hataların yanı sıra, Faruk Ünal en iyi anwser'a sahiptir. Bir işlev hile yapar.
Son eşleşmeyi bulmak için strrpos () işlevini kullanabilirsiniz.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
$string[$findChar]=".";
echo $string;
Çıktı: picture_0007.value
Kısa bir versiyon:
$NewString = substr_replace($String,$Replacement,strrpos($String,$Replace),strlen($Replace));
Dizenin sonuyla eşleşmek için reg ifadesinde "$" kullanın
$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'
İlgilenen için: regix kullanarak sağ taraftan değiştirebilmeniz için preg_match kullanan bir işlev yazdım.
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;
}
Veya her iki seçeneğin kısayol kombinasyonu / uygulaması olarak:
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 ve https://stackoverflow.com/a/23343396/3017716 tabanlı
s($str)->replaceLast($search, $replace)bulunan yardımcı olabilir .