Şimdi Ara

String içinde aynı ifade birden fazla varsa nasıl alınır?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
636
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Gelen yazı içindeki @ ile başlayan sözcüğü şu şekilde alıyorum:

    $ayir = strstr($gelen, "@");
    $ayir2 = strstr($gelen, " ", true);


    Bunun daha kolay bir yolu var mı?
    Bir de bu şekilde yalnızca bir sözcük alabiliyorum, $gelen içerisinde iki tane @ ile başlayan sözcük varsa nasıl alabilirim bunu?



  • Eğer lazım olan olursa çözdüm sorunu:

    $gelen = "@deneme başka yazı @diğeri";

    $ayir = explode(" ",$gelen);

    foreach($ayir as $i =>$key) {
    $i >0;
    $al = strstr($key, "@");
    echo $al.' ';

    }
  • Boşluklardan ayrımak yerine @ karakterinden ayırmak daha mantıklı değil mi? Gerçi aynı sonuca ulaşınca pek problem kalmıyor aslında. Sadece bu kod yoğun kullanılacaksa önemli.

    $gelen = "@deneme baska yazi @digeri";

    $ayir = explode("@",$gelen);

    foreach($ayir as $i) {

    if ($i != ""){
    echo '@'.$i.' ';
    }

    }

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • nihattr kullanıcısına yanıt
    Boşlukları kullanmaktaki amacım yalnızca @ ile başlayan sözcüğü alabilmek. Dediğiniz gibi alınca aradaki sözcükleri de alıyor.
    @deneme kısmını alıp "başka yazı" yı atlayacak. Sonra @diğeri sözcüğünü alacak. @ ile boşluk arasında kalanı alıyorum yani.
  • Şimdi anladım. O zaman ilk kelime için strtok() fonksiyonunu ekleyebiliriz.

    $gelen = "@deneme baska yazi @digeri";

    $ayir = explode("@",$gelen);

    foreach($ayir as $i) {

    if ($i != ""){
    echo '@'.strtok($i, " ").' ';
    }

    }



    Diğer yöntem de preg_match ile. O da kullanışlı.

    $gelen = "@deneme baska yazi @digeri";

    preg_match_all('/@(.[^\s]+)/', $gelen, $sonuc);
    foreach($sonuc['1'] as $i => $yazi){
    echo '@'.$yazi.' ';
    }

    -----
    Desende @ karakterinden sonra boşluk hariç herhangi bir karakteri kabul ediyoruz. Bu da ilk kelimeye denk geliyor.
    $sonuc['1'] yerine $sonuc['0'] kullanınca @ koymaya gerek yok. Yani çıktı şu şekilde.

    quote:

    Array
    (
    [0] => Array
    (
    [0] => @deneme
    [1] => @digeri
    )

    [1] => Array
    (
    [0] => deneme
    [1] => digeri
    )

    )


    -----

    Bu kodların çalışma sürelerine baktım. Benim bu cevapta paylaştığım ilk kodlama ortalama 2.60 mikrosaniyede çalışıyor. Sizin verdiğiniz 3.50 mikrosaniye. Preg match ile verdiğim 8.50 mikrosaniye gibi. Sizin yönteminiz de başarılı sayılır yani. Birden fazla yöntem sunmuş olduk.



    < Bu mesaj bu kişi tarafından değiştirildi nihattr -- 9 Nisan 2015; 20:39:47 >
    < Bu ileti tablet sürüm kullanılarak atıldı >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.