• 06-09-2010, 14:41:53
    #1
    Arkadaşlar http://www.haberler.com/2010/Ocak/1/guncel/ adresindeki <head></head> etiketleri arasındaki veriyi çekip ekrana yazdırmaya çalışıyorum ama ekrana yazmıyor. Bomboş bir sayfa çıkıyor karşıma...
    <?php
    $site=file_get_contents("http://www.haberler.com/2010/Ocak/1/guncel/");
    preg_match_all('#<head>(.*?)</head>#',$site,$al);
    echo $al[1][0];
    ?>
  • 06-09-2010, 14:57:59
    #2
    Eposta Aktivasyonu Gerekmekte
    Bu şekilde deneyin.

    preg_match_all('#<head>(.*?)</head>#si',$site,$al);
  • 06-09-2010, 15:00:53
    #3
    NiZZo_ adlı üyeden alıntı: mesajı görüntüle
    Bu şekilde deneyin.

    preg_match_all('#<head>(.*?)</head>#si',$site,$al);
    Çok teşekkür ederim. # 'dan sonra yazdığınız si ne anlama geliyor?
  • 06-09-2010, 15:45:22
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Burada preg_match_alla gerek yok. preg_match işinizi görür.

    <?php 
    $site = file_get_contents('http://www.haberler.com/2010/Ocak/1/guncel/'); 
    $head = preg_match('~<head>(.*?)<\/head>~im', $site, $match) ? $match[1] : 'Alınamadı';
    echo $head;
    ?>
    Alıntı
    Ayarlar (Modifiers)
    Desen gövdesini iyice öğrendikten sonra hâliyle sıra ayarlara geliyor. Bu ayarlar kısmı, programlama dilleri arasında biraz farklılık gösteriyor. Burada yer vereceklerim, PHP’nin Regexp fonksiyonlarında geçerli olanları. Onların da hepsi değil, en mühim olan ve sık kullanılanları. Diğer diller ve diğer ayarlar için, ilgili kaynakları karıştırmanız lâzım.

    “i” ayarı
    Desenin, büyük küçük harf hassâsiyeti olmadan çalışmasını sağlar. Harfin menşei, “Case insensitive” ifâdesindeki “insensitive” kelimesidir.

    “m” ayarı
    Başlangıç ve bitişi yakalamaya yarayan “^” ve “$” karakterlerinin satır başı ve sonu için de geçerli olmasını sağlar. Desenimizi, içinde satır sonu karakteri “\n” geçmeyen metinler üzerinde uygularsak, hiç etkisi olmaz. Harfin menşei muhtemelen “multiline” kelimesidir.

    “s” ayarı
    Bu ayarı kullandığımızda, desenimizdeki “satır sonu hâriç herhangi bir karakter” anlamına gelen “.” işâretleri, satır sonu karakterlerini “\n” de yakalamaya başlar. Harfin menşei “single line” ifâdesidir.

    “x” ayarı
    “Whitespace” denilen boşluk türü (\n\r\t) karakterlerin, karakter setleri içinde yer aldıkları durumlar hâricinde desenden sayılmamasını sağlar. Bu sâyede, deseni program içinde çok satırlı şekilde yazmak mümkün olur.

    “e” ayarı
    preg_replace fonksiyonu için özel bir ayardır. Fonksiyonun değiştirme işlemlerini bitirdikten sonra, yerine yerleştireceği sonuçları eval’den geçirmesini sağlar. Bu sâyede, yakalanan her bir eşleşme için kendi tanımladığımız bir başka fonksiyonu çağırarak, sonuç üzerinde düzenleme yapma şansımız olur.

    “u” ayarı
    Desenimizin UTF-8 olduğu kabulü ile çalıştırılmasını sağlar. Eğer desenin içinde yer aldığı .php dosyamız UTF-8 karakter kodu ile kayıtlı ise, regexp fonksiyonları kullanırken bu ayarı eklememiz gerekir.
  • 06-09-2010, 21:15:05
    #5
    tek bir veri çekiyosan ki iki tane head olduğunu hiç zannetmiyorum preg_match yap o daha kolay olur
  • 06-09-2010, 21:58:57
    #6
    Üyeliği durduruldu
    darker adlı üyeden alıntı: mesajı görüntüle
    tek bir veri çekiyosan ki iki tane head olduğunu hiç zannetmiyorum preg_match yap o daha kolay olur
    :s dediğini anlamadım, preg_match veri almaz, adı üstüne "match" karşılaştırma yapar...
  • 06-09-2010, 22:02:56
    #7
    $ali = preg_match('<head>([^<]+)</head>~',$ali, $eslesmeler) ? $eslesmeler[1] : '-';   
    print $ali ;//<head>ile</head> arasındaki yazıyı çeker bulamassa - yazar
  • 06-09-2010, 22:05:53
    #8
    Üyeliği durduruldu
    darker adlı üyeden alıntı: mesajı görüntüle
    $ali = preg_match('<head>([^<]+)</head>~',$ali, $eslesmeler) ? $eslesmeler[1] : '-';   
    print $ali ;//<head>ile</head> arasındaki yazıyı çeker bulamassa - yazar
    bilemiyorum, halâ şüpheliyim, bana göre veri çekmez..
  • 06-09-2010, 22:44:21
    #9
    darker adlı üyeden alıntı: mesajı görüntüle
    $ali = preg_match('<head>([^<]+)</head>~',$ali, $eslesmeler) ? $eslesmeler[1] : '-';   
    print $ali ;//<head>ile</head> arasındaki yazıyı çeker bulamassa - yazar
    ([^<]+) kullanımız yanlış. (.*?) kullanmalısınız. Çünkü; <head> </head> arasında birçok etiket var. Ve bunlarda da < karakteri var. Ve, ilk bulduğu zaman eşleştirmeyi durduracaktır.

    Oktigh adlı üyeden alıntı: mesajı görüntüle
    bilemiyorum, halâ şüpheliyim, bana göre veri çekmez..
    Gülüyorum... "match" kelimesi farkındaysanız preg_match_allda da var. (:

    Bu arada, yukarıda kod vermiştim zaten ben.