1. substrın (strpos) Kullanımı
Önemli:
2. case‑insensitive arama (stripos)
Sadece belki de “PHP” yerine “php” ile eşleşir.
3. Düzenli İfade ile tam kelime eşlemesi (preg_match)
4. Kelime kümesi üzerinden arama (explode + in_array)
Bu yöntem, sadece boşlukla ayrılmış kelimelere uygundur; noktalama işaretleriyle beraber kullanmak için önceden temizleme gerekebilir.
5. Closure ile filtreleme (array_filter)
Bu yaklaşım, case‑insensitive ve özel karakterleri de kontrol etme esnekliği sunar.
Soru: Bu yöntemlerden hangisini sıklıkla kullanıyorsunuz ve neden? Karşılaştığınız en büyük zorluk ne oldu?
strpos()fonksiyonu, aranan dizeyi bulursa konumunu, bulamazsafalsedöndürür.
PHP:
$metin = "Merhaba dünya, PHP ile kodlama keyifli.";
$kelime = "PHP";
$bulundu = strpos($metin, $kelime);
if ($bulundu !== false) {
echo "Kelime bulundu, konum: $bulundu";
} else {
echo "Kelime bulunamadı.";
}
strpos() sıfır konumunu da (başlangıç) döndürebilir; bu yüzden !== false ile karşılaştırma yapılmalıdır.2. case‑insensitive arama (stripos)
stripos()fonksiyonu büyük/küçük harf duyarsızdır.
PHP:
$kelime = "php";
$bulundu = stripos($metin, $kelime);
3. Düzenli İfade ile tam kelime eşlemesi (preg_match)
- Parçalı eşleşmeleri engellemek için
\b(kelime sınırı) kullanılır.
PHP:
$kelime = "PHP";
$pattern = '/\b'.preg_quote($kelime, '/').'\b/i'; // /i case‑insensitive
if (preg_match($pattern, $metin, $matches)) {
echo "Kelime bulundu: {$matches[0]}";
}
preg_quote() ile özel karakterlerin düzenli ifadede metin olarak geçmesi sağlanır.4. Kelime kümesi üzerinden arama (explode + in_array)
- Kelimeleri boşluk/virgül gibi ayırıcılarla bölüp, dizi içinde arayabilirsiniz.
PHP:
$kelimeler = explode(' ', $metin); // boşlukla böl
if (in_array($kelime, $kelimeler)) {
echo "Kelime bulundu.";
}
5. Closure ile filtreleme (array_filter)
- Özelleştirilmiş mantıkla arama yapabilirsiniz.
PHP:
$kelimeler = preg_split('/\s+/', $metin);
$bulunan = array_filter($kelimeler, fn($s) => strtolower($s) === strtolower($kelime));
if (!empty($bulunan)) {
echo "Kelime bulundu.";
}
Güvenlik ve Kötüye Kullanım Önlemleri
- Kullanıcıdan gelen metinde
preg_matchkullanıyorsanız,preg_quote()ile aranan diziyi kaçırarak regex enjeksiyonunu önleyin. striposvestrposgibi fonksiyonlar doğrudan string arar; şüpheli girişler için önceden temizleme (htmlspecialchars,trim) yapmanız önerilir.
Yaygın Hatalar
| Hata | Neden? | Çözüm |
|---|---|---|
strpos 0 değeri kontrol edilemez | 0, bool false ile karıştırılır | !== false ile karşılaştır |
preg_match ile yanlış eşleşme | Kelime sınırı yok | \b kullanmak |
in_array ile noktalama işaretleri | "PHP," eşleşmez | Kelimesi temizle (str_replace) veya preg_split kullan |
Soru: Bu yöntemlerden hangisini sıklıkla kullanıyorsunuz ve neden? Karşılaştığınız en büyük zorluk ne oldu?