• 28-02-2008, 17:36:37
    #1
    Üyeliği durduruldu
    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.
  • 28-02-2008, 19:09:18
    #2
    obidergi ,

    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
    #3
    Üyeliği durduruldu
    preg_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:52:22
    #4
    $desen = "#<div id="(.*?)">#si";
    preg_match($desen,$veriniz,$dizi);
    $dizi = $dizi[1]; //sadece düzenli ifadeyi aldık.
    echo $dizi;
    preg_match_all uyuşan tum ifadeleri alır. preg_macth ise sadece uyuşan bir tane ifade alır.
    Böle bir denermisin çekmesi lazım.
  • 28-02-2008, 19:59:20
    #5
    Ü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:03:09
    #6
    Ama bi dakka şimdi veriniz dediğin kısım ne. Url baglanıpda verimi çekiyorsun nası oluyor olay.
  • 28-02-2008, 20:06:21
    #7
    <?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
    #8
    Üyeliği durduruldu
    preg_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.
  • 28-02-2008, 20:17:32
    #9
    evet dizi olarak alıor. 0 yapınca tum kodu aldı 1 yapında sadece düzenli ifadeyi aldı. eğer bir tane daha duzenli ifade olsaydı oda 2 olcaktı.