[php] regexp raz dziala a raz nie

0

Mecze wyrazenia od dwoch dni i cos mi wychodzi ale nie wiem czy to ja jestem za glupi na to czy taka to juz faza ksiezyca ;)

  $regexp = "(href=\".+?\")"; 
  $zm = file("http://www.allegro.pl");                                          
  for ($i = 0; $i < count($zm); $i++)         
  {                                                      
    preg_match($regexp, $zm[$i], $res, PREG_OFFSET_CAPTURE); 
    if (count($res) > 0)  
    { 
      print_r($res[0][0]);                                            
      echo "<br>\n";                                                 
    }                                                        
  } 

Moje pytanie brzmi dlaczego jak zmienie na onet.pl to w ogole nie dziala (pokazuje tylko dwa linki do css i ico a przeciez jest ich wiecej) chyba ze zmienie na
$regexp = "(href=.+?)"; ale patrzalem w zrodla i na onecie sa " wiec nie wiem dlaczego tak sie dzieje :/ Z allegro tez jest dziwnie bo nie pokazuje linkow kategorii. Przeciez te linki sa takie same jak inne wiec dlaczego jedne widzi a inne nie :/

Bardzo byc moze ze jest gdzies blad w rozumowaniu ale ja juz nie mam sily dlatego zwracam sie z prosba do forumowiczow o naprostowowanie mojej skrzywionej swiadomosci :>

0
Pedros napisał(a)

patrzalem w zrodla i na onecie sa "
A ja patrzyłem i z " widzę tylko dwa linki, o których wspomniałeś.

Przy okazji zobaczyłem najdziwniejsze źródło strony w życiu :|
Poniosło ich nieco...

To samo z allegro - linki z kategorii nie mają "

0

Marooned po tym co napisales zwatpilem w moje oczy i sprawdzilem raz jeszcze i zdziwilem sie na calego :> Pytanie powinno brzmiec: dlaczego allegro niektore linki daje z " a niektore bez w odroznieniu od przegladarki? :)

W operze nie ma " natomiast jak sprawdzalem w firefoxie to sa " przy kategoriach. Jako dowod rzeczowy zrobilem screeny :>

http://pedros.myftp.org/opera_allegro_src.png
http://pedros.myftp.org/firefox_allegro_src.png

Ale to chociaz wyjasnia dlaczego moj regexp nie dziala :P

0

Spróbuj użyć takiego:
$regexp = '/href=(['"])?([^'" >]+)\1?/'; //poprawiłem

W drugim backreference masz adres.

//przy okazji zauważyłem, że w pierwszym poście kod php został pokolorowany a po zalogowaniu już jest bez kolorów... jednak zmiana skórki i wylogowanie nic nie dały - pozostaje czarny.. :|

[<font color="blue">edited</span>]
ok - poprawiłem regexp ale: ale Ty wyłapujesz tylko jeden pasujący ciąg na linię - a np. kategorie są w jednej linii - dlatego dostajesz tylko jedną. To należy zmienić.

0
Pedros napisał(a)

(...)W operze nie ma " natomiast jak sprawdzalem w firefoxie to sa " przy kategoriach. Jako dowod rzeczowy zrobilem screeny :>

http://pedros.myftp.org/opera_allegro_src.png
http://pedros.myftp.org/firefox_allegro_src.png

Ale to chociaz wyjasnia dlaczego moj regexp nie dziala :P
Firefox ma to do siebie, że kod źródłowy który widzimy w podglądzie jest już przezeń "podrasowany", tak aby jako tako odpowiadał rozsądnym standardom. Trochę drażniace imvho.

// Ja mówię o Ctrl + U - Q

0
Qyon napisał(a)

Firefox ma to do siebie, że kod źródłowy który widzimy w podglądzie jest już przezeń "podrasowany", tak aby jako tako odpowiadał rozsądnym standardom. Trochę drażniace imvho.
To zależy, czy źródło oglądasz jako "dokument DOM" czy "normalny" - druga opcja nic nie zmienia w źródle.

0
<?php

    function get_links($url)
    {
        $reg = "#href=(\"([^\"]+)|\'([^\']+)|([^>\s]+))#i";

        $source = join('', file($url));  
                             
        preg_match_all($reg, $source, $match); 

        $ret = array_merge($match[2], $match[3], $match[4]);

        return array_unique($ret);
    } 

    echo join('<br>', get_links('http://www.onet.pl'));

?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1