Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyrazeniem regularnym
Forum PHP.pl > Forum > PHP
kajko84
Witam serdecznie

Mam problem z ogarnieciem dzialania wyrazen regularnych i bardzo prosze o pomoc...

Zalozmy ze mam taki fragment kodu html:

  1. <tr class="por_w2">
  2.  
  3.  
  4. <td>
  5. <a href="http://kredyt.hipoteczny.pl/gemoneybank/">GE Money Bank</a>
  6. </td>
  7. <td>
  8.  
  9. <a href="http://kredyt.hipoteczny.pl/gemoneybank/56/" >Kredyt hipoteczny</a>
  10.  
  11.  
  12. </td>
  13.  
  14. <td>od 7.93 do 10.35</td> <td>zmienna</td> <td>równe malejące</td>
  15. <td>
  16.  
  17. <a href="javascript:void(0)" onclick="openSaleChannel(10)"><img src="http://kredyt.hipoteczny.pl/d/direct/i/zaloz.gif" alt="Wypełnij formularz" border="0"></a>
  18.  
  19. </td>
  20.  
  21. </tr>
  22.  
  23.  
  24. <tr class="por_w1">
  25.  
  26.  
  27. <td>
  28. <a href="http://kredyt.hipoteczny.pl/mbank/">mBank</a>
  29. </td>
  30. <td>
  31.  
  32. <a href="http://kredyt.hipoteczny.pl/mbank/mplan.html" >mPLAN hipoteczny</a>
  33.  
  34.  
  35. </td>
  36.  
  37. <td>od 8.39 do 10.59</td> <td>zmienna</td> <td>malejące</td>
  38. <td>
  39.  
  40. <a href="javascript:void(0)" onclick="openSaleChannel(4)"><img src="http://kredyt.hipoteczny.pl/d/direct/i/zaloz.gif" alt="Wypełnij formularz" border="0"></a>
  41.  
  42. </td>
  43.  
  44. </tr>


Jak widac sa to 2 wiersze tabeli zawierajace dane dot. ofert kredytow hipotecznych konkretnych bankow.
I teraz przy pomocy wyrazen regularnych chcialbym wyciagnac wartosci oprocentowania dla konkretnego banku.
Zabralem sie za to w taki sposob:

  1. <?php
  2. preg_match_all('!<a href="[^javascript].*?">(.*?)</a>!', $tab, $banki); // w zmiennej $tab mam cala ta tabele
  3. foreach ($banki[1] as $bank) {
  4.    echo $bank . ' : ';
  5.        echo preg_match('!<td><a href=".*">'.$bank.'</a></td><td>.*</td><td>(.*?)</td>!', $tab, $test);
  6.        echo ' : ' . $test[1] . '<br />';
  7. }
  8. ?>


pierwszy etap dziala bez zarzutu. nazwy bankow wyciaga tak jakbym chcial. ale ten preg_match juz nie bardzo. glowie sie z tym od wczoraj. sporo czytalem i kombinowalem, ale wszystko na nic. moze ktos mi pomoc?

Pozdrawiam
mdco
Uzyj "Pattern Modifiers":

  1. <?php
  2. echo preg_match('!<td><a href=".*">'.$bank.'</a></td><td><a href=".+" >.+</a></td><td>(.*?)</td>!ms', $tab, $test);
  3. ?>
kajko84
dzieki, jestem troche blizej rozwiazania, ale ale... jak oznaczyc "nowe linie" w takim wyrazeniu jak powyzsze?
chodzi o to ze np miedzy znacznikami <td> a <a href=".+"> moze byc jedna lub wiecej nowa linia.


ostatecznie doszedlem do czegos takiego:

  1. <?php
  2. preg_match('!<tr class=".+">.*?<td>.*?<a href=".+">'.$bank.'</a>.*?</td>.*?<td>.*?<a href=".+" >.*</a>.*?</td>.*?<td>(.*?)</td>.*?<td>.+</td>.*?<td>.+</td>.*?<td>.*?</td>.*?</tr>!ms', $tab, $test);
  3. ?>


z tym ze wyciaga mi oprocentowanie tylko dla ostatniego banku (ostatniego wiersza calej tabeli) a ja nie wiem dlaczego smile.gif
empathon
Masochiści tongue.gif
http://pl2.php.net/manual/en/class.domxpath.php
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.