Sadece PHP'nin mb_ereg_replace kullanarak eşleşen ilk elemanını değiştirin

3 Cevap php

Bunun yerine bir dize her eşleşen eleman yerine bir dize yalnızca ilk eşleşen elemanını değiştirmek istiyor

$str = 'abc abc abc';
$find = 'abc';
$replace = 'def';
echo mb_ereg_replace( $find, $replace, $str );

Bu "def def def" dönecektir.

Ben neyi değiştirmek gerekir $ it "def abc abc" geri almak için parametreyi bulmak ya $ yerine?

3 Cevap

Çok zarif değil, ama deneyebilirsiniz

$find = 'abc(.*)'; 
$replace = 'def\\1'; 

Unutmayın sizin $find daha yakalama gruplarını içeren, sizin $replace ayarlamak gerekiyorsa. Ayrıca, bu her satırda ilk abc yerini alacak. Lütfen giriş birkaç satır içeriyorsa, [\d\D] yerine . kullanımı.

Bir mb_strpos() "abc" için, daha sonra yapılacak mb_substr() yapabilirsiniz

örneğin

$str = 'blah abc abc blah abc';
$find = 'abc';
$replace = 'def';
$m  = mb_strpos($str,$find);
$newstring = mb_substr($str,$m,3) . "$replace" . mb_substr($str,$m+3);

Eğer fantezi regex değiştirmeleri ihtiyacınız sürece, dördüncü parametre olarak $count sürer, düz eski str_replace kullanarak daha iyidir:

$str = str_replace($find, $replace, $str, $count);