Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenia reg.
Forum PHP.pl > Forum > Przedszkole
acztery
Chcę parsować taki kod:

  1. <tr class="alt-row">
  2.  
  3. <td class="column-country"><a href="http://www.budgetvoipcall.com/sms_rates/cheap-sms/bahrain/eur">Bahrain</a></td>
  4.  
  5. <td class="column-rate">0.030</td>
  6.  
  7. <td class="column-vat">0.035</td>
  8.  
  9. </tr> <tr class="">
  10.  
  11. <td class="column-country"><a href="http://www.budgetvoipcall.com/sms_rates/cheap-sms/bangladesh/eur">Bangladesh</a></td>
  12.  
  13. <td class="column-rate">0.030</td>
  14.  
  15. <td class="column-vat">0.035</td>
  16.  
  17. </tr> <tr class="alt-row">
  18.  
  19. <td class="column-country"><a href="http://www.budgetvoipcall.com/sms_rates/cheap-sms/barbados/eur">Barbados</a></td>
  20.  
  21. <td class="column-rate">0.030</td>
  22.  
  23. <td class="column-vat">0.035</td>
  24.  
  25. </tr>


dokladniej ta strona : http://budgetvoipcall.com/rates/

i chce pobrac ceny za pomocą wyrażenia reg.

ale nie działa? sad.gif

mam takie wyrażenie:

  1. $regexp_b='|<td class="column-country">(.*?)</td>|i';


ale to pobiera tylko Kraj jak zamienię na column-rate to pobiera cenę.

Jak pobrać wszystkie 3 wartości...

chodzi o poprawienie tylko wyrażenie...
Fifi209
Zacznij od <tr> skończ na </tr> resztę wrzuć w wyrażenie i zastąp odpowiednimi znakami (.*?)
acztery
pierwsze tr ma <tr class="alt-row"> a potem class=""

wiec twoje rozwiązanie już nie zadziała pozatym tam są jakieś spacje itp to też ma znaczenie bo już próbowałem i nic nie działa.
Fifi209
Cytat(acztery @ 7.07.2011, 20:03:58 ) *
pierwsze tr ma <tr class="alt-row"> a potem class=""

No i co z tego? Dostosuj do tego wyrażenie.
Cytat(acztery @ 7.07.2011, 20:03:58 ) *
wiec twoje rozwiązanie już nie zadziała pozatym tam są jakieś spacje itp to też ma znaczenie bo już próbowałem i nic nie działa.

Źle próbowałeś. ;]
Crozin
Wyrażenia regularne nie nadają się do parsowania HTML. Wykorzystaj DOMDocument::loadHTML.
acztery
jesteś bardzo pomocny. wiem ze tam trzeba w wyrażeniu coś dopisać ale nie wiem jak. tr jest nie konieczne bo np

mam takie $regexp_voipblast='#<td\s+id\s*=\s*"destination"\s*>(\s*<a.*?)</td>\s*<td.*?<em.*?>(.*?)</em.*?</td>\s*<td.*?<em.*?>(.*?)</em.*?</td>\s*<td.*?<em.*?>(.*?)</em.*?</td>#si';

ale dla innej strony i działa..

wiec jak masz tak pomagać sobie sobie daruj .... bo to nie jest żadna pomoc... nic nowego mi nie powiedziałeś.

Crozin wiem wiem ale ten projekt odziedziczyłem i tu są wyrażenia nic nowego nie chcę tu dopisywać to jest część większej klasy. wiec... muszę rozwiązać to za pomocą wyrażeń
Fifi209
Aby nie być gołosłownym, że się da:
  1. <?php
  2.  
  3. $string = file_get_contents('plik.txt');
  4.  
  5. $reg = '#<tr [^>]+>.*?<td class="column-country"><a href="(.*?)">(.*?)</a>.*?</td>.*?<td class="column-rate">(.*?)</td>.*?<td class="column-vat">(.*?)</td>.*?</tr>#is';
  6.  
  7. preg_match_all($reg, $string, $matches);
  8.  
  9. echo '<pre>';
  10. print_r($matches);
  11.  
  12. ?>


Gdzie w pliku mam Twojego html'a
acztery
FIFI SUPER! a jak się pozbyć tego <a href tak by nie bral pod uwage tego tylko nazwe panstwa.

i będzie pieknie działać
acztery
FIFI SUPER! a jak się pozbyć tego <a href tak by nie bral pod uwage tego tylko nazwe panstwa.

i będzie pieknie działać
Fifi209
Zamień:

<a href="(.*?)">(.*?)</a>

Na

<a href=".*?">(.*?)</a>

A gdzie punkcik? ;]
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.