Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_match - problem
Forum PHP.pl > Forum > PHP
sparco
witam, mam problem z funkcja preg_match, chce pobrac dane ze strony, dokladnie chodzi o dane:

<div class="costam"> dane do pobrania </div>

dane te sa w kilkunastu linijkach

  1. <?php
  2. preg_match('/<div class=\"costam\">(.*)</div>/is', $open_ogl, $match);
  3. ?>


cos takiego nie dziala ;/
JoShiMa
A nie brakuje Ci '\' przed nawiasami trójkątnymi?

  1. <?php
  2. preg_match('/<div class=\"costam\">(.*)</div>/is', $open_ogl, $match);
  3. ?>


Poza tym powinno być *? a nie *

A poza tym co to znaczy, że nie działa. Nic nie zwraca? Źle zwraca?
webdice
Strasznie kombinujecie.

  1. <?php
  2. preg_match('/<div class="costam">(.*)</div>/', $open_ogl, $match);
  3. ?>
bim2
webdice, modyfikator "s" i "i" były raczej przydatne. Zgaduję, bo nie widzimy kodu z jakiego to ma zostać pobrane, ale w większości jest potrzebne. Wydaje mi się że np jest <div[2 spacje]class= i dlatego nie łapie.
sparco
taka postac

  1. <?php
  2. preg_match('/<div id=\"item-desc\" class=\"clearfix\">(.*?)</div>/is', $open_ogl, $match);
  3. ?>


zwraca mi tylko pierwsza linijke w tym divie
bim2
zamień preg_match na preg_match_all smile.gif
sparco
niestety to samo, w tresci jest tez sporo innych div`ow

tresc - przyklad

  1. <div id="item-desc" class="clearfix">
  2. <p><div style="text-align: left"><strong><u>!! Przy zakupiewiększej ilości sztuk cena do negocjacji !!</u><br/></strong></div>
  3. <div style="text-align: left"/>
  4. <div style="text-align: left"/>
  5. <div style="text-align: left"/>
  6. <div style="text-align: left"><span style="font-weight: bold">Najlepsza i najbardziej wydajna, polecana szczególnie do wydruków ciągłych (zamówienia, faktury, bilansy, zestawienia, raporty itp).<br/>
  7. Od wielu lat jest czołowym modelem min. w bankach, gdzie ceniona jest jej <span style="text-decoration: underline">szybkość, niezawodność</span> oraz <span style="text-decoration: underline">niskie</span> <span style="text-decoration: underline">koszty</span> <span style="text-decoration: underline">eksploatacji.<br/></span> Dlatego też nowe drukarki tego typu kosztują ciągle około 2000 zł.<span style="text-decoration: underline"><br/></span></span></div>
  8. <br/>
  9. <br/>
  10. <br/>
  11. dane ze strony producenta:<br/>
  12. <br/>
  13. <span style="font-weight: bold">Ilość igieł</span> : 9<br/>
  14. <div class="DetailedBotTextBold"><span style="font-weight: bold">Prędkość drukowania (cps)</span>:</div>
  15. <ul>
  16. <li>435 cps (najwyższa prędkość)</li>
  17. <li>387 cps (w trybie High speed draft @ 10cpi)</li>
  18. <li>290 cps (w trybie Utility @ 10 cpi)</li>
  19. <li>73 cps (w trybie NLQ)</li>
  20. </ul>
  21. <br/>
  22. <div class="DetailedBotTextBold" style="font-weight: bold">Rozdzielczość:</div>
  23. 240 x 216dpi (maks.)<br/>
  24. <br/>
  25. <div class="DetailedBotTextBold" style="font-weight: bold">Pierwsza linia wydruku:</div>
  26. <div class="DetailedBotText">0.5mm od góry strony<br/>
  27. </div>
danek
Ja do wyciągania powtarzających się danych używam preg_match_all:
Kod
preg_match_all("|<div class=\"costam\">([^<]*?)</div>|",$zrodlo,$dane);

Zwróci Ci to:
$dane[1][0]="pierwsze wystąpienie"
$dane[1][1]="drugie wystąpienie"
$dane[1][2]="trzecie wystąpienie"
sparco
niestety ale nic mi nie zwrocilo ;/
danek
to zmień ([^<]*?) na (.*?) , bo założyłem, że tam będzie tylko text, a nie html
sparco
dalej nic...
danek
A zależy Ci na załamaniach tekstu, czy może być ciurkiem w 1 linijce?
sparco
moze byc ciurkiem aby zebralo dene z dokladnie z tego diva, probowalem roznych kombinacji ale pobiera cala strone, a tego nie chce...
danek
Ja w swoim skrypcie dane wejściowe filtruję:
Kod
$response=str_replace(array("\n", "\r", "\t",), '', $response);

Dzięki czemu otrzymuję tekst bez nowych linii, oraz powtórzonych spacji i tabulatorów...
sparco
okej ale to dalej nie pomaga w otrzyaniu danych z tego okreslonego div`a
bim2
Coś ty musisz robić źle... Pokaż no cały kod.
sparco
  1. <?php
  2. $open_ogl = curl_get_file_contents( 'http://.......' );                            
  3. $open_ogl = str_replace(array("\n", "r", "\t",), '', $open_ogl);                            
  4. preg_match('/<div id=\"item-desc\" class=\"clearfix\">(.*?)</div>/is', $open_ogl, $match);
  5. print_r($match);
  6. ?>
danek
  1. <?php
  2. $response = '<div id="item-desc" class="clearfix">
  3. <p><div style="text-align: left"><strong><u>!! Przy zakupiewiększej ilości sztuk cena do negocjacji exclamation.gif</u><br/></strong></div>
  4. <div style="text-align: left"/>
  5. <div style="text-align: left"/>
  6. <div style="text-align: left"/>
  7. <div style="text-align: left"><span style="font-weight: bold">Najlepsza i najbardziej wydajna, polecana szczególnie do wydruków ciągłych (zamówienia, faktury, bilansy, zestawienia, raporty itp).<br/>
  8. Od wielu lat jest czołowym modelem min. w bankach, gdzie ceniona jest jej <span style="text-decoration: underline">szybkość, niezawodność</span> oraz <span style="text-decoration: underline">niskie</span> <span style="text-decoration: underline">koszty</span> <span style="text-decoration: underline">eksploatacji.<br/></span> Dlatego też nowe drukarki tego typu kosztują ciągle około 2000 zł.<span style="text-decoration: underline"><br/></span></span></div>
  9. <br/>
  10. <br/>
  11. <br/>
  12. dane ze strony producenta:<br/>
  13. <br/>
  14. <span style="font-weight: bold">Ilość igieł</span> : 9<br/>
  15. <div class="DetailedBotTextBold"><span style="font-weight: bold">Prędkość drukowania (cps)</span>:</div>
  16. <ul>
  17. <li>435 cps (najwyższa prędkość)</li>
  18. <li>387 cps (w trybie High speed draft @ 10cpi)</li>
  19. <li>290 cps (w trybie Utility @ 10 cpi)</li>
  20. <li>73 cps (w trybie NLQ)</li>
  21. </ul>
  22. <br/>
  23. <div class="DetailedBotTextBold" style="font-weight: bold">Rozdzielczość:</div>
  24. 240 x 216dpi (maks.)<br/>
  25. <br/>
  26. <div class="DetailedBotTextBold" style="font-weight: bold">Pierwsza linia wydruku:</div>
  27. <div class="DetailedBotText">0.5mm od góry strony<br/>
  28. </div>';
  29. $response=str_replace(array("\n", "r", "\t",), '', $response);
  30. preg_match_all("|<div class=\"DetailedBotTextBold\"[^>]*>(.*?)</div>|",$response,$dane);
  31. $i=0;
  32. while($dane[1][$i])
  33. {
  34. echo htmlspecialchars($dane[1][$i], ENT_QUOTES);
  35. echo"<br>-------------------------------------<br>";
  36. $i++;
  37. }
  38. ?>

Mi daje:
  1. &lt;span style=&quot;font-weight: bold&quot;&gt;Prędkość drukowania (cps)&lt;/span&gt;:<br>-------------------------------------<br>Rozdzielczość:<br>-------------------------------------<br>Pierwsza linia wydruku:<br>-------------------------------------<br>

czyli:
  1. <span style="font-weight: bold">Prędkość drukowania (cps)</span>:
  2. -------------------------------------
  3. Rozdzielczość:
  4. -------------------------------------
  5. Pierwsza linia wydruku:
  6. -------------------------------------
sparco
ale chodzi o kod z diva: <div id="item-desc" class="clearfix"> kod </div>, czyli wszystko od poczatku do konca co podalem wyzej, to jest wycinek ze strony http://warszawa.olx.pl/drukarka-oki-3320-n...tp-iid-15308669, dokladnie chodzi mi o pobranie tresci ogloszenia.
danek
no to w tym momencie musisz na stronie znaleźć 2 charakterystyczne punkty, które się nie powtarzają, po czym wycinasz text spomiędzy nich i go parsujesz...
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.