Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> php jak pobrać z tabelki drugie <td> </td>?
arekgr
post 26.12.2009, 23:42:14
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


Witam

Próbuję wyciągnąć z tabelki dane za pomocą regexp .
Sytuacja następująca w pierwszym <td> </td> jest znane -stałe słowo "dane"
chcę wyciągnąć znaki zawierające sie w następnym <td></td> znaki to losowe słowa a-Z i 0-9 potrzebne do pracy.

ten kod pobiera prawie dobrze tylko nie kończy na następnej pozycji, drugim td, tylko przerabia caly dokument do konca , jak go poprawić ?

/dane(.*)<\/td>/si


Arek

Ten post edytował arekgr 26.12.2009, 23:54:44
Go to the top of the page
+Quote Post
Crozin
post 27.12.2009, 00:51:37
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


.* -> .*?

Poczytaj o tzw. zachłanności w wyrażeniach regularnych
Go to the top of the page
+Quote Post
arekgr
post 27.12.2009, 01:12:18
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


To nie pomaga za szybko się konczy, juz na kodzie <td>dane</td> i dalej nie czyta

/dane(.*?)<\/td>/si
Go to the top of the page
+Quote Post
Crozin
post 27.12.2009, 02:24:40
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


No to dodaj jeszcze do wyrażenia by odczytało i następne <td>...</td>
Go to the top of the page
+Quote Post
arekgr
post 27.12.2009, 12:20:48
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


w ten sposóbo pobiera za dużo ..

/dane(.*?)<\/td><td(.*?)><\/td>/si

jak to zrobić ? żeby pobralo zawartość z <td>dane</td> i drugiego <td>szukane !</td>
Go to the top of the page
+Quote Post
Crozin
post 27.12.2009, 12:33:54
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


W tym drugim to chyba chciałeś: <td>(.*?)</td>, a nie to co napisałeś... winksmiley.jpg
Go to the top of the page
+Quote Post
arekgr
post 27.12.2009, 13:06:07
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


poprawilem tak jak pisałeś i dodalem \s+ bo nic sie nie pojawilo ale i tak za duzo pobiera dodatkowe <td> ,a bez \s+ nic nie
pobiera ...

/dane(.*?)<\/td>\s+<td>(.*?)<\/td>/si
Go to the top of the page
+Quote Post
Crozin
post 27.12.2009, 13:33:09
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. <pre><?php
  2.  
  3. $content = <<<EOT
  4. <table>
  5. <tr>
  6. <td>bla bla dane bla bla</td>
  7. <td>xxx 1</td>
  8. <td>yyy</td>
  9. <td>zzz</td>
  10. </tr>
  11. <tr>
  12. <td>bla bla bla bla</td>
  13. <td>xxx</td>
  14. <td>yyy</td>
  15. <td>zzz</td>
  16. </tr>
  17. <tr>
  18. <td>bla bla dane bla bla</td>
  19. <td>xxx 2</td>
  20. <td>yyy</td>
  21. <td>zzz</td>
  22. </tr>
  23. <tr>
  24. <td>bla bla bla bla</td>
  25. <td>xxx</td>
  26. <td>yyy</td>
  27. <td>zzz</td>
  28. </tr>
  29. </table>
  30. EOT;
  31.  
  32. preg_match_all('#<td>.*?dane.*?</td>.*?<td>(.*?)</td>#is', $content, $result);
  33.  
  34. print_r($result[1]);
Sprawdzone - działa.
Go to the top of the page
+Quote Post
arekgr
post 27.12.2009, 19:54:40
Post #9





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


Dzieki za kod ale ten co podałeś również pobiera wszystkie dane pomiedzy tagami <td> a mi chodzilo o tag z słowem Dane i następny po nim, moja tabelka ma sporo wiecej tych zbytecznych td ...
Go to the top of the page
+Quote Post
Crozin
post 27.12.2009, 21:54:12
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tamten kod zwraca Ci wszystkie znalezione: <td>...dane...</td><td>...</td> (indeks zero tablicy $result)
Oraz wszystkie <td>...</td> wystąpujące zaraz po TD z "dane" (indeks 1 tablicy $result)
Go to the top of the page
+Quote Post
arekgr
post 27.12.2009, 22:17:27
Post #11





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


Właśnie działa dobrze , ale mi chodziło tylko o zawartość tylko jednego tagu <td> tuż po <td> danych </td>
Go to the top of the page
+Quote Post
zegarek84
post 28.12.2009, 11:35:43
Post #12





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


to jaki problem teraz z tej tablicy pobrać gotową wartość??
tutaj też masz gotową odpowiedź ale nie na wyrażeniach regularnych lecz DOM:
  1. $content = <<<EOT
  2. <table>
  3. <tr>
  4. <td>bla bla dane bla bla</td>
  5. <td>xxx 1</td>
  6. <td>yyy</td>
  7. <td>zzz</td>
  8. </tr>
  9. <tr>
  10. <td>bla bla bla bla</td>
  11. <td>xxx</td>
  12. <td>yyy</td>
  13. <td>zzz</td>
  14. </tr>
  15. <tr>
  16. <td>bla bla dane bla bla</td>
  17. <td>xxx 2</td>
  18. <td>yyy</td>
  19. <td>zzz</td>
  20. </tr>
  21. <tr>
  22. <td>bla bla bla bla</td>
  23. <td>xxx</td>
  24. <td>yyy</td>
  25. <td>zzz</td>
  26. </tr>
  27. </table>
  28. EOT;
  29.  
  30. $doc = new DOMDocument();
  31. $doc->loadHTML($content);
  32. echo $doc->getElementsByTagName('td')->item(1)->nodeValue;
  33. // lub echo $doc->getElementsByTagName('td')->item(1)->textContent;


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
wry
post 28.12.2009, 14:19:56
Post #13





Grupa: Zarejestrowani
Postów: 32
Pomógł: 3
Dołączył: 9.06.2007

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


a jesli sie upierasz przy wyrazeniu regularnym to przelacznik U bedzie nieodzowny

  1. '/dane.*<\/td>\s+<td>(.*)<\/td>/Usi'


Ten post edytował wry 28.12.2009, 14:21:32


--------------------
Go to the top of the page
+Quote Post
arekgr
post 28.12.2009, 23:39:22
Post #14





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 26.12.2009

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


Witam dziękuje za zainteresowanie i kilka nowych odpowiedzi , w dalszym ciągu regexp w takiej postaci nie wydziela prawidlowo danych

preg_match_all("/Lokalizacja.*<\/td>\s+<td>(.*)<\/td>/Usi",$curl_result, $out PREG_SET_ORDER);

może faktycznie zrobić to na dom..

Arek G

dziękuje wszystkim ślicznie !
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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 09:30