Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] preg_match_all
bluepk
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 20.04.2009

Ostrzeżenie: (0%)
-----


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>


Ten post edytował bluepk 8.01.2014, 09:41:28
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pokaż, jak to robiłeś.


--------------------
Go to the top of the page
+Quote Post
bluepk
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 20.04.2009

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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ć.
Go to the top of the page
+Quote Post
Methestel
post
Post #5





Grupa: Zarejestrowani
Postów: 46
Pomógł: 10
Dołączył: 30.06.2008

Ostrzeżenie: (0%)
-----


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);


Ten post edytował Methestel 8.01.2014, 12:52:22
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Sprawdziłem u siebie: pozbycie się zdublowanych spacji pomaga. Dodatkowo musisz dodać u siebie modyfikator zachłanności dla wyrażenia regularnego (U). Śmiga.
Go to the top of the page
+Quote Post
em1X
post
Post #7





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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. }


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
shakugan45
post
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 9.01.2014

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
em1X
post
Post #9





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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);


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:38