Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [regex][php] Wyszukiwanie tabeli html nie zawierającej innej tabeli
Forum PHP.pl > Forum > PHP
deirathe
Chciałbym wyszukać w dokumencie html tabelkę, a właściwie jej treść, która nie będzie zawierać innej tabelki. Próbowałem czegoś takiego:
  1. <?php
  2. preg_match_all("#<table>[^(<table>)]*</table>#is",$tekst,$m);
  3. ?>


ale nie działa, samo [^<table>] też nie będzie działać tak jak chcę, czy ktoś wie jak to rozwiązać??
R4D3K
  1. <?php
  2. preg_match_all('/<table>([^<///table>])<///table>/',$tekst,$m);
  3. ?>


Ta funkcja odszuka Ci tabelkę, jeśli natrafi na zagnieżdżenie (co jest nie zgodne z standardem WC3 i tak się nie powinno robić, przypominam tabelka powinna służyć tylko do formatowania wyświetlania danych, a zamiast zagnieżdżania powinieneś stosować rowspan i colspan) to powinna wyjąć najbardziej zagnieżdżoną tabelkę.

Tylko pamiętaj o:
* wyjmiesz tabelkę razem z <tr><td>
* jeśli masz <table class=... lub inne tego typu rzeczy skrypt nie zadziała, trzeba przerobić odpowiednio wzorzec wyrażenia regularnego.
deirathe
To wiem chodzi o to ze jak masz witrynę na której znajduję się kilka tabel i szukasz tabeli która zawiera link z atrybutem class równym abba to jeżeli ten link znajduję się w 3 tabeli z 5 to wyrażenie pociągnie zawartość tabeli 1,2 i 3 a powinnien tylko 3
btw Twoje wyrażenie nie pociągnie też tabeli zawierającej tagi <a> , </a>
R4D3K
No tak bo zapomniałem o białych znakach
  1. <!--
  2. To change this template, choose Tools | Templates
  3. and open the template in the editor.
  4. -->
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. </head>
  9. <body>
  10. TODO write content
  11. <tr>
  12. <td>1</td>
  13. <td>2</td>
  14. </tr>
  15. <tr>
  16. <td>1</td>
  17. <td>2</td>
  18. </tr>
  19. </table>
  20. </body>
  21. </html>


  1. <?php
  2.        $temp=trim(file_get_contents('test.html'));
  3.        echo preg_match('/<table>([sS]*)</table>/', $temp, $matches);
  4.        echo '<pre>'; print_r($matches); echo'</pre>';
  5.        ?>


Teraz powinno działać, chodzarz do końca nie wiem o co ci chodzi z tym <a></a>
A tak z ciekawości nie lepiej Ci użyć DomDocument czy wolisz od nowa Rzym budować ?
marcin_jimmi
Pozwolę sobie podłączyć do tego tematu. Mam taki problem. Jest strona, która wyszukuje pliki w internecie. Chciałbym sie pod nią podłączyć. Wiem na jakich zasadach wyszukuje te pliki. W adresie należy dodać tylko wyszukiwaną frazę w postaci: strona.com/download/wyszukiwana fraza. Wynik jest zwracany w postaci tabeli w znacznikach:
  1. <table class="content" id="search-result-exact">wyniki</table>


Aby łatwo wyszukiwać pliki stworzyłem wyszukiwarkę z formularzem.

Mój kod to:
  1. if(isset($_POST['wyslij']))
  2. {
  3. $cnt = trim(file_get_contents('http://www.ta strona.com/download/'.$_POST['fraza']));
  4. $sSearch = $_POST['fraza'];
  5. if ( strpos( $cnt, $sSearch ) !== false )
  6. {
  7. preg_match_all('/<table class=\"content\" id=\"search-result-exact\">([^<Vtable>])<Vtable>/',$cnt,$wynik);
  8. echo '<pre>'; print_r($wynik); echo'</pre>';
  9. }
  10. else
  11. {
  12. print 'Nie znalazlem...';
  13. }
  14. }
  15. else
  16. {}


Ciągle otrzymuję pustą tablicę. Zastanawiałem sie już, czy na stronie wyszukiwania wyniki nie są różnie wyświetlane ale zawsze tak samo... Jakieś pomysły?
Neo
  1. preg_match_all('#<table class="content" id="search-result-exact">(.*?)</table>#s',$cnt,$wynik);
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.