Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4
Cevap
687
Tıklama
0
Öne Çıkarma
String içinde aynı ifade birden fazla varsa nasıl alınır?
A
10 yıl
Çavuş
Konu Sahibi

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?

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



A
10 yıl
Çavuş
Konu Sahibi

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.' ';

}



N
10 yıl
Yarbay

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ı >
Bu mesaja 1 cevap geldi.
A
10 yıl
Çavuş
Konu Sahibi

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.




Bu mesajda bahsedilenler: @nihattr
N
10 yıl
Yarbay

Ş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ı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.