• 24-05-2024, 10:28:01
    #1
    preg_match_all ile bir siteden veri çekiyorum.
    Örneğin bir kişiye ait detaylarda 10 alan var, başka bir kişide 5 alan var, div'lerde buna göre farklılaşıyor. Veri olmayan yerlerde kodlar farklı geliyor buralara değişken atayınca boş veri geldiğinden hata oluyor ya da dizi uzunlukları farklı olduğundan kaymalar oluyor.

    Sabit bir alan yok birden fazla veri var ve bazı alanlarda veri yoksa div tagları eksik oluyor. Böyle olunca farklı sonuç veriyor ve for döngüsü ile değişkenlere dizi elemanlarını atarken yanlış veriyor.
    Örneğin
    [0] A kişisi
    [1] B Kişisi
    [2] C Kişisi
    [3] D Kişisi

    başka bir preg match ile bunların daha önce etkinliğe katılıp katılmadığı bilgisi var
    Bunlardan sadece biri etkinliğe katıldıysa onun karşısına gelmesini istiyorum ama 1 kayıt listeleniyor ve haliyle o diziyi A kişisinin karşısına atıyor

    [0] - "Veri Yok"
    [1] - "Veri Yok"
    [2] - "Etkinliğe Katıldı"
    [3] - "Veri Yok"

    şeklinde yazdırmak istiyorum.
    Tüm verileri kapsayacak şekilde 10 alanı kapsayan preg match all yapısı mı kullanmalıyım. Parçalayarak tek tek almak istediğimde dizi uzunlukları değişken oluyor.

    Örnek kod
    preg_match_all('/<ul class="details"><li class="details-item" data-label="Form"> <span data-shorttext="Form" title="Form"><span>A<\/span><\/span> <strong>(.*?)<\/strong> <\/li><li class="details" data-label="Age"> <span data-shorttext="Etkinlik" title="Etkinlik"><span>Etkinlik<\/span><\/span> <strong>(.*?)<\/strong> <\/li><\/ul>/is',$html,$match);
    
    preg_match_all('/<ul class="details"><li class="details-item" data-label="Form"> <span data-shorttext="Form" title="Form"><span>A<\/span><\/span> <strong>(.*?)<\/strong> <\/li> <\/li><\/ul>/is',$html,$match);
  • 24-05-2024, 10:37:52
    #2
    Edit:
    Herkese iyilik yapılmaz.

    Biraz daha regex inceleyin olmazsa sayfa linkini atın çekilecek alanları söyleyin bir bakayım
  • 24-05-2024, 23:22:55
    #3
    preg_match_all('/<ul class="details"><li class="details-item" data-label="Form"> <span data-shorttext="Form" title="Form"><span>A</span></span> <strong>(.*?)</strong> </li><li class="details" data-label="Age"> <span data-shorttext="Etkinlik" title="Etkinlik"><span>Etkinlik</span></span> <strong>(.*?)</strong> </li></ul>/is',$html,$match); 
    preg_match_all('/<li class="details-item" data-label="([^"]+)">[^<]+<strong>(.*?)<\/strong>/is',$html,$match);
    deniyebilirsiniz