Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][inne][PHP]Wyrażenia regularne i html
Forum PHP.pl > Forum > Przedszkole
pluskwa
Witam,

Chcę stworzyć parser pewnej strony, niestety zatrzymałem się w miejscu i nie potrafię ruszyć dalej z tematem. Na obecną chwilę udało mi się wsadzić całą parsowaną stronę do zmiennej $strona. Dowiedziałem się też że następnym krokiem będzie wyciągnięcia z niej danych za pomocą wyrażeń regularnych i funkcji preg_match. Niestety nie potrafię złożyć takiego działającego wyrażenia.

Proszę o pomoc jak by to finalnie wyglądało:

  1. preg_match('pewnien_regexp', $strona, $matches);
  2. echo ($matches);


Czy to jest poprawne? Oczywiście brak wyrażenia.
Chcę wyciągnąć dane zawarte dokładnie między takimi znacznikami:

  1. <table width="100%" cellpadding="0" cellspacing="0" border="0">


Albo jeśli będzie łatwiej z:

  1. <!-- info -->
  2. <!-- info end -->


Z góry dziękuję za pomoc!

Baardzo proszę o pomoc, męczę się z tym już drugi dzień ;/
nospor
Cytat
Baardzo proszę o pomoc, męczę się z tym już drugi dzień ;/

Bez żartów.... przez dwa dni to byś spokojnie się nauczył podstaw wyrażeń regularnych, a do tego co chcesz zrobić wymagane są właśnie podstawy wyrażeń smile.gif Nie pisz więc, że siedzisz nad tym drugi dzień, bo to nie ładnie tak kłamać smile.gif
pluskwa
Ależ owszem, nauczyłem się już podstaw ale nie wiem czy dobrze wszystko zrozumiałem. Moja propozycja to:

  1. preg_match("/(<!-- info -->).*\n\r(<!-- info end -->)/", $strona, $matches);
  2. echo "wyniki:{$matches[0]}";


Niestety nie działa ;/ dodanie modyfikatorów g i m też nie pomaga.
Po prostu nie chciałem się osmieszać smile.gif
tolomei
Witaj.

Jeśli chcesz wyciągać dane z html-a to zainteresuj się raczej Simple HTML DOM Parser. Dzięki niemu jesteś w stanie dotrzeć do każdej wartości, każdego atrybutu.

Jeśli strona jest pisana z palca to wystarczy, że ktoś doda jedną spację, albo da apostrof zamiast cudzysłowia i już wyrażenia regularne mogą nie zdać egzaminu.
Jeśli jednak potrzebujesz wyrażeń regularnych to tutaj znajdziesz bardzo dobry kurs.

Pozdrawiam.

PS. Podczas programowania wyniki wyświetlaj w ten sposób:

  1. echo '<pre>';
  2. print_r($matches);
  3. echo '</pre>';


To da Ci rozeznanie co wyciągnąłeś z tekstu. Pierwszy element tablicy zawsze zawiera całość, o którą pytasz w wyrażeniu.
nospor
Cytat
Po prostu nie chciałem się osmieszać
Pokazanie, że coś się samemu robiło, nie jest ośmieszaniem się, wręcz odwrotnie.

Z racji, ze sam zacząłeś coś robić, prosżę, o to rozwiązanie:
  1. preg_match("/^.*<!-- info -->(.*?)<!-- info end -->.*$/s", $strona, $matches);
  2. print_r($matches);
pluskwa
Wielkie dzięki, prawda jest taka że bez znajomości PHP ciężko jest coś samemu skleić, mówię tu o urzyciu DOM. Próbowałem lecz nawet proste wstawienie przykładu:

  1. <?php
  2. include_once('/simple_html_dom.php');
  3.  
  4. echo file_get_html('http://www.google.com/')->plaintext;
  5. ?>


Niczym nie skutkuje, to znaczy nic się nie wyświetla, oczywiście simple_html_dom.php mam w podanym folderze.
Nie wiem gdzie robię błąd, zresztą zakładałem już wątek na ten temat ale niestety się urwał.

Natomiast co do wyrażeń regexp, najłatwiej się uczyć na przykładzie lecz nigdzie nie znalazłem przykładu wyciągnięcia danych z pomiędzy danych znaczników. Może to brzmi jak kradzierz intelektualna ale na podstawie samego Tut`a ciężko samemu coś sklecić. Przestudiowałem już cały poradnik Gajdy.

Jeszcze raz dziękuję za pomoc smile.gif
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.