Menu

PHP strpos(): Bir Alt Dizgenin Konumunu Bulma

strpos($haystack, $needle) $needle değerinin ilk geçişinin konumunu, bulunamazsa false döndürür. !== false kontrolünü, büyük küçük harfe duyarsız stripos fonksiyonunu, strrpos ile son eşleşmeyi ve her geçişi bulmayı öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

strpos($haystack, $needle) $haystack içindeki ilk $needle değerinin 0'dan sayılan konumunu, orada değilse false döndürür. Sonucu her zaman !== false ile test edin, çünkü baştaki bir eşleşme 0 döndürür.

PHP 8'de yalnızca evet veya hayır yanıtına ihtiyacınız varsa str_contains() daha açıktır. Konum önemli olduğunda strpos() kullanın.

Söz dizimi

strpos(string $haystack, string $needle, int $offset = 0): int|false

Arama büyük küçük harfe duyarlıdır. $offset aramaya nereden başlanacağını söyler; negatif bir başlangıç dizgenin sonundan sayar.

!== false tuzağı

Gevşek karşılaştırmada (==) 0 ve false eşittir. Bu yüzden 0 konumundaki bir eşleşme katı olmayan her kontrolde "bulunamadı" sayılır.

Aynı kural, gerçek bir eşleşme için hepsi 0 döndürebilen stripos(), strrpos() ve array_search() için de geçerlidir.

stripos ile büyük küçük harfe duyarsız arama

stripos() aynı argümanları alır ve ASCII harflerde büyük küçük harfi yok sayar.

strrpos ile son geçişi bulma

strrpos() son eşleşmenin konumunu döndürür. Bir dosya uzantısını veya bir yolun son parçasını almanın standart yoludur.

Özellikle dosya adları için pathinfo($file, PATHINFO_EXTENSION) bunu sizin yerinize yapar. Dizgeyi o konumda kesmek substr() sayfasında anlatılıyor.

Aramayı bir başlangıç noktasından başlatma

Üçüncü argüman dizgenin başını atlar. Negatif bir başlangıç sondan o kadar karakter önce başlar.

Tüm geçişleri bulma

strpos() bir eşleşme bulur. Hepsini bulmak için bir döngü kurun ve başlangıcı her eşleşmenin ötesine taşıyın:

Yalnızca sayı mı lazım? substr_count($text, 'the') daha kısadır. Kalıplar için PREG_OFFSET_CAPTURE ile preg_match_all() her eşleşmeyi konumuyla döndürür.

Japonca metin: bayt konumu ve karakter konumu

strpos() çok baytlı metni doğru bulur, ama döndürdüğü sayı bayt cinsindendir. UTF-8'de kana ve yaygın kanji karakterleri 3'er bayt kaplar, bu yüzden tamamen Japonca bir metinde bayt konumu karakter konumunun üç katıdır, karışık metinde ise ikisi daha az belirgin şekillerde birbirinden uzaklaşır. mb_strpos() karakter döndürür ve mb_substr() bunu bekler.

İkisini karıştırmak klasik bir hatadır: bir strpos() sonucunu mb_substr() fonksiyonuna vermek dizgenin çok ilerisinden başlar. strpos ile substr, mb_strpos ile mb_substr kullanın.

Sıkça Sorulan Sorular

PHP'de strpos() ne döndürür?

İlk eşleşmenin 0'dan sayılan konumunu bir tam sayı olarak, aranan değer bulunamazsa false döndürür. strpos('hello', 'l') 2 döndürür.

strpos() ile neden !== false gerekiyor?

Çünkü tam başta bir eşleşme 0 döndürür ve 0 == false true'dur. if (strpos($s, 'a')) 0 konumundaki bir eşleşmeyi "bulunamadı" sayar. Her zaman strpos($s, 'a') !== false ile karşılaştırın.

strpos, stripos ve strrpos arasındaki fark nedir?

strpos() ilk eşleşmeyi bulur ve büyük küçük harfe duyarlıdır. stripos() büyük küçük harfi yok sayarak ilk eşleşmeyi bulur. strrpos() son eşleşmeyi bulur. strripos() büyük küçük harfi yok sayarak son eşleşmeyi bulur.

Bir dizgenin metin içerip içermediğini kontrol etmek için strpos mu yoksa str_contains mi kullanmalıyım?

PHP 8'de düz bir true veya false döndüren ve 0 konumu tuzağı olmayan str_contains($haystack, $needle) kullanın. Konumun kendisine ihtiyacınız olduğunda strpos() kullanın.

strpos'u Japonca metinle nasıl kullanırım?

strpos() Japonca metni doğru bulur ama bir bayt konumu döndürür. Konumu mb_substr() fonksiyonuna verecek ya da kullanıcıya gösterecekseniz konumu karakter olarak döndüren mb_strpos() kullanın.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA