Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_match_all i alias tablicy (chyba można to tak nazwać)
linx
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Witam,
jestem w trakcie przygotowywania skryptu z CURL.

Posiadam ciąg z którego chcę wyciągnąć dane i godzinę:
  1. <p class="tb_title">Tabela kursowa obowiązuje od dnia 20.02.2009 godzina 16:36</p>

Dane dają się wyciągną ale dal łatwości pisania skryptu chciałem skorzystać z aliasów (chyba tak można to nazwać)
http://pl.php.net/preg_match_all - > Przykład #3 Using named subpattern" title="Zobacz w manualu PHP" target="_manual
Kiedy chce wyciągnąć np godzinę:
  1. <?php
  2. preg_match_all('/<p.*?class="tb_title".*?>Tabela kursowa obowiązuje od dnia.*?godzina.*?(?<name>d++)*?</p>/', $wynik, $matches0);
  3. ?>

to wyświetla mi się:
  1. <?php
  2. [name] => Array
  3.        (
  4.            [0] => 36
  5.        )
  6. ?>

zamiast:
  1. <?php
  2. [name] => Array
  3.        (
  4.            [0] => 16:36
  5.        )
  6. ?>


bez względu na to czy dam: (?<name>\d++), (?<name>\d+), (?<name>\w++), (?<name>\w+) zawsze dostaje "[0] => 36".
Kiedy daje (?<name>\d), (?<name>\w) wtedy dostaje "[0] => 6"

Czy ma ktoś jakiś pomysł(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) na mój problem??
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
linx
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


No dobra mam jeszcze jedne problem, mianowicie (kod html):

  1. <tr class="">
  2. <td width="30%">Australia</td>
  3. <td width="15%">DOLAR</td>
  4. <td width="17%">1 AUD</td>
  5.  
  6. <td width="12%">2.3338</td>
  7. <td width="15%">2.4706</td>
  8. <td width="12%">2.4022</td>
  9. </tr>
  10.  
  11. <tr class="">
  12. <td width="30%">Kanada</td>
  13. <td width="15%">DOLAR</td>
  14.  
  15. <td width="17%">1 CAD</td>
  16. <td width="12%">2.8924</td>
  17. <td width="15%">3.0622</td>
  18. <td width="12%">2.9773</td>
  19. </tr>


No i wiadomo chcę wyciągnąć wszystkie dane, tylko jest problem że wartości są w różnych liniach i nie do konca to działa. Stworzyłem taką formułę:
  1. <?php
  2. preg_match_all('/<tr.*class=\"\">.*?<td.*width=\"30%\">(.*?)</td>.*?<td.*width=\"15%\">(.*?)</td>.*?<td.*width=\"17%\">(.*?)</td>.*?<td.*width=\"12%\">(.*?)</td>.*?<td.*width=\"15%\">(.*?)</td>.*?<td.*width=\"12%\">(.*?)</td>.*?</tr>/', $wynikcurl, $tablica);
  3. ?>


Niestety przy takiej formule zwracana jest pusta tablica.
Grzebiąc w necie dodawałem dodatkowe inf. typu i, s, si

  1. <?php
  2. ....</tr>/[TUTAJ], $wynikcurl, $tablica);
  3. ?>


Ale efekt jest taki że przy s, si dostaje jakieś dziwactwa:

  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.            [0] => <tr class="">
  6.                                <td width="30%">Australia</td>
  7.                                <td width="15%">DOLAR</td>
  8.                                <td width="17%">1 AUD</td>
  9.  
  10.                                <td width="12%">2.3338</td>
  11.                                <td width="15%">2.4706</td>
  12.  
  13.                                <td width="12%">2.4022</td>
  14.                        </tr>
  15.            
  16.            <tr class="">
  17.                                <td width="30%">Kanada</td>
  18.                                <td width="15%">DOLAR</td>
  19.  
  20.                                <td width="17%">1 CAD</td>
  21.  
  22.                                <td width="12%">2.8924</td>
  23.                                <td width="15%">3.0622</td>
  24.                                <td width="12%">2.9773</td>
  25.                        </tr>
  26.        )
  27.  
  28.    [1] => Array
  29.        (
  30.            [0] => Kanada
  31.        )
  32.  
  33.    [2] => Array
  34.        (
  35.            [0] => DOLAR
  36.        )
  37.  
  38.    [3] => Array
  39.        (
  40.            [0] => 1 CAD
  41.        )
  42.  
  43.    [4] => Array
  44.        (
  45.            [0] => 2.8924
  46.        )
  47.  
  48.    [5] => Array
  49.        (
  50.            [0] => 3.0622
  51.        )
  52.  
  53.    [6] => Array
  54.        (
  55.            [0] => 2.9773
  56.        )
  57.  
  58. )
  59. ?>


No i wartości są czytane tylko z drugiego <TR></TR>

Jak z tym sobie poradzić??
Czy ktoś ma jakiś dokładniejszy opis do preg_match, preg_match_all??

Pozdrawiam.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 22:00