Merhabalar.
Sorunumun düzenli ifadeler olduğunu biliyorum fakat uygulamada istediğim sonucu vermiyor.
Öncelikle amacım, gelen veri içindeki tırnaklar içindeki verileri temizlemek ve parantez içindeki verileri temizlemek.
Bulduğum örnek;
<?php $metin= "string strong big stung";
If ( preg_match( "/s.*g/", $metin, $dizi) )
Print $dizi[0];
// Ekrana string strong big stung yazdirir ?>
Fakat ben,tırnaklar için kaçış karakterini kullanmama rağmen temizlemedi, parantez içini de ayın şekilde, temizlemiyor. Bu konuda eksik olan kısım nedir? ( Örnekte preg_match olmasına rağmen ben preg_match_all kullandım, bunun gözden kaçırdığım bir sorunu olabilir mi? dizilere attığı için kullandım preg_match_all komutunu. Hem gelen veride tırnak ve parantez temizlenecek veri 1 adet değil, yani örneğin 10 tane parantez içi temizlenecek.)
(Örnekteki .*'ın ne anlama geldiğini bilyorum.)
Yardımlarınız için teşekkür ederim.
preg_match (Düzenli ifadeler)
17
●5.513
- 28-02-2008, 19:09:18obidergi ,
Nokta demek \n(newline) hariç bütün herşey demek, * ise 0 veya daha fazla demek yani örnek deki şu anlama geliyor s ve g arasında newline hariç ne gelirse al demek almak istediğin bölümüde alt part oluşturcaksın yani parentez içinde yazarsan sadece o bölümü alır ve bir diziye atar.. yapmak istediğin kalıbı buraya yaz ben şunu şöyle yapmak istiyorum diye onun üzerinde çalışalım. - 28-02-2008, 19:39:01Üyeliği durduruldupreg_match("#\"(.*?)\"#si",$verimiz,$x);
echo x[1];
ile tırnak içindeki veriyi okutabiliyorum fakat preg_match_all ile yapmaya çalıştığımda hata alıyorum ve nedenini anlayamadım.
Temizlemek istediÄŸim veri ise;
<div id="veri7349322980"> (deÄŸer) </div> <div id="veri7349322943"> (deÄŸer) </div> <div id="veri73493223423"> (deÄŸer) </div> <div id="veri7349322988904"> (deÄŸer) </div>
gibi düşünebilirsiniz.
preg_replace kullandığımda sadece ilk temizlenecek veri olan veri7349322980 i temizliyor. geri kalanı temizletemedim.
"almak istediğin bölümüde alt part oluşturcaksın yani parentez içinde yazarsan sadece o bölümü alır ve bir diziye atar"
bu kısmı tam anlayamadım @Dr.iq - 28-02-2008, 19:59:20Üyeliği durduruldu$desen = "#<div id="(.*?)">#si";
satırında hata verdi.
$desen = "#<div id=\"(.*?)\">#si";
yapınca da ilk veriyi çekti sadece.
<?
$veriniz = "<div id=\"veri7349322980\"> (deÄŸer) </div> <div id=\"veri7349322943\"> (deÄŸer) </div> <div id=\"veri73493223423\"> (deÄŸer) </div> <div id=\"veri7349322988904\"> (deÄŸer) </div>";
$desen = "#<div id=\"(.*?)\">#si";
preg_match($desen,$veriniz,$dizi);
$dizi = $dizi[1]; //sadece düzenli ifadeyi aldık.
echo $dizi;
?> - 28-02-2008, 20:06:21
<?php $deger[] = '<div id="veri7349322980">Değer1</div>'; $deger[] = '<div id="veri7349322983">Değer2</div>'; $deger[] = '<div id="veri734f9322940">Değer3</div>'; $deger[] = '<div id="veri734sdgfD322980">Değer4</div>'; for($i=0; $i<count($deger); $i++) { preg_match_all('#<div id="[a-zA-Z0-9\_]*">(.*?)</div>#si',$deger[$i],$cikti); echo $cikti[1][0].'<br />'; } ?>yaptığım örneği inceleyin lütfen takıldığınız yer olursa söyleyin,preg_match istediğiniz veriyi alır keser onu kullanırsınız,preg_replace ise istediğiniz bölümü istediğiniz şeyle değiştirir onu alır kullanırsınız... - 28-02-2008, 20:09:26Üyeliği durduruldupreg_match_all yapınca çıktısı array oluyor.
echo $dizi[0]; ( 0,1..... )
diye kontrol edince sorun çıkmadı.
sanırım oldu
çok teşekkürler.
Dr.iq örneğiniz çok ayrıntılı olmuş teşekkürler.
echo $cikti[1][0].'<br />';
[1][0] sanırım iki boyutlu matris (array, dizi) oluyordu sanırım değil mi?
bu satırı biraz açarsanız, çok makbule geçer.
