Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] preg_match_all
Forum PHP.pl > Forum > PHP
bluepk
Witam,

próbuje na swojej stronie wyciągnąć dane z WOŚPowych aukcji allegro. Niestety wszystko jest okej do momentu, w którym kod przechodzi do nowej linii. Próbowałem użyć str_replace i nic nie pomaga.

Czy mógłby ktoś pomóc rozwiązać problem?

  1. <td class="col1"><a href="/warsztaty-fotograficzne-z-lidia-popiel-i852705"
  2. class="iImg" data-img="http://img01.charitystatic.pl/179847_cce6238_128x96.jpg"></a></td>
Kshyhoo
Pokaż, jak to robiłeś.
bluepk
próbowałem różnych kombinacji, ale załóżmy

  1. $content = file_get_contents('http://aukcje.wosp.org.pl/listing?sellerId=672050&order=pd');
  2. $usun = str_replace(array("\n", "\n\r", "\r\n", "\r"), " ", $content);
  3. preg_match_all('[<td class="col1"><a href="/(.*)" class="iImg" data-img="(.*)"></a></td>]', $usun, $wynik);
  4. echo print_r($wynik);
phpion
Usuń jeszcze zwielokrotnione spacje. Aktualnie chyba przed class masz 2 spacje (1 we wklejonym przez Ciebie kodzie, 2 po usunięciu znaku nowej linii). Jak to zrobić - poszukaj. W manualu jest przykład, w Googlach też bez problemu znajdziesz. Ewentualnie możesz zamieniać znak końca linii na pusty ciąg i powinno zabanglać.
Methestel
Prawdopodobnie w tym konkretnym przypadku masz więcej niż jedną spację między atrybutem 'href' i 'class' a twoje wyrażenie regularne zakłada że jest tylko jedna spacja między atrybutami.

Możesz to rozwiązać np tak:
  1. //$content = file_get_contents('http://aukcje.wosp.org.pl/listing?sellerId=672050&order=pd');
  2. //$usun = str_replace(array("\n", "\n\r", "\r\n", "\r"), " ", $content);
  3. $usun = preg_replace('/ +/', ' ', $usun); //Wszystkie ciągi spacji zamienia na pojedyńczą spację
  4. //preg_match_all('[<td class="col1"><a href="/(.*)" class="iImg" data-img="(.*)"></a></td>]', $usun, $wynik);
  5. //echo print_r($wynik);


... albo tak:

  1. //$content = file_get_contents('http://aukcje.wosp.org.pl/listing?sellerId=672050&order=pd');
  2. //$usun = str_replace(array("\n", "\n\r", "\r\n", "\r"), " ", $content);
  3. preg_match_all('[<td +class="col1" *><a +href="/(.*)" +class="iImg" +data-img="(.*)" *></a></td>]', $usun, $wynik);
  4. //echo print_r($wynik);
phpion
Sprawdziłem u siebie: pozbycie się zdublowanych spacji pomaga. Dodatkowo musisz dodać u siebie modyfikator zachłanności dla wyrażenia regularnego (U). Śmiga.
em1X
Po co się męczyć? Wystarczy wzorzec do źródła dopasować.

  1. $content = file_get_contents('http://aukcje.wosp.org.pl/listing?sellerId=672050&order=pd');
  2.  
  3. preg_match_all('#<td class="col1"><a href="(.*?)"\s*class="iImg" data-img="(.*?)">#', $content, $aukcje);
  4. $wynik=array_combine($aukcje[1], $aukcje[2]);
  5.  
  6. echo '<pre>';
  7. foreach ($wynik as $url => $img) {
  8. echo $url,' - ',$img,'<br>';
  9. }
shakugan45
Nie chcę robić niepotrzebnego spamu, więc piszę tutaj:
jak wyciągnąć za pomocą preg_match_all coś spomiędzy znaczników <strong> </strong> ?
Próbowałem już na wiele sposobów ale za każdym razem wyświetla mi że znalazło tylko 2 wyniki podczas gdy na stronie jest ich koło 100
  1. preg_match_all("/<strong>([^`]*?)<\/strong>/",$pg,$tytul);
em1X
Cytat(shakugan45 @ 9.01.2014, 22:17:06 ) *
Nie chcę robić niepotrzebnego spamu, więc piszę tutaj:
jak wyciągnąć za pomocą preg_match_all coś spomiędzy znaczników <strong> </strong> ?
Próbowałem już na wiele sposobów ale za każdym razem wyświetla mi że znalazło tylko 2 wyniki podczas gdy na stronie jest ich koło 100
  1. preg_match_all("/<strong>([^`]*?)<\/strong>/",$pg,$tytul);


  1. preg_match_all('#<strong>(.*?)</strong>#sm', $pg, $wyniki);
  2.  
  3. echo '<pre>';
  4. print_r($wyniki);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.