Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenie regularne
Forum PHP.pl > Forum > Przedszkole
evolucja
Cześć.
Potrzebuję wyciągnąć dane wszystkich oddziałów z tej strony:
http://skokwesola.pl/onas/oddzialy.html

Potrzebuję nazwę miejscowości, kod pocztowy, adres i telefon. Generalnie mógłbym samemu próbować stworzyć jakieś wyrażenia, ale problem jest z różnym rozłożeniem tych danych. Chodzi mi o spacje, tabulatory itd. Nie jest to jeden ciągły kod. Byłby ktoś łaskaw mi pomóc? worriedsmiley.gif
Ulysess
pobierasz zawartość strony np funkcja file_put_contents

i dalej juz przetwarzasz , mozesz uzyc do tego np pteg_match_all

jako wzór dajesz poniższy kod
"
<div class="adres"><a href="/oddzialy.html?layout=single&id=7"><strong>Złotów </strong>77-400<br /></a>
ul. Reymonta 6 </div>
<div class="telefon">tel. <br />67/ 263 57 61</div>

<div class="godziny">
<span><strong>Pon</strong><br />9:00-17:00</span>
<span><strong>Wt</strong><br />8:00-16:00</span>
<span><strong>Śr</strong><br />9:00-17:00</span>
<span><strong>Czw</strong><br />9:00-17:00</span>

<span><strong>Pt</strong><br />8:00-16:00</span>
</div>
<hr />

" ALE tam gdzie wartości są różne wstawiasz ".*" lub "(.*)" .* czyli dowolna wartość w tym miejscu , (.*) dowolna wartość w tym miejscu którą pobierasz

później zliczasz ile takich wzorów znajdzie i w pętli for wyświetlacz czy co tam chcesz z tymi danymi zrobić. PS gotowca nie dostaniesz wink.gif
lobopol
Jak patrzę po kodzie html to bez niczego jesteś w stanie skopiować całość. Wszystko jest ślicznie ułożone w divie o id woj-lista, a dane są wszystkie regularnie ułożone. Spacje i tabulatory przecież można uwzględnić w pregmatchu
evolucja
Gdyby to było wszystko takie proste... Chyba ze wszystkich rzeczy w PHP najtrudniej mi pojąć właśnie te regular expresions. sad.gif
  1. <?
  2. $string = '<div class="adres"><strong>Ostrowiec Świętokrzyski </strong>27-400<br />
  3. ul. Jana Pawła II 7d </div>
  4. <div class="telefon">tel. <br />41/ 263 18 41</div>
  5. <div class="godziny">
  6. <span><strong>Pon</strong><br />8:00-16:00</span>
  7. <span><strong>Wt</strong><br />8:00-16:00</span>
  8. <span><strong>Śr</strong><br />8:00-16:00</span>
  9. <span><strong>Czw</strong><br />8:00-16:00</span>
  10. <span><strong>Pt</strong><br />8:00-16:00</span>
  11. </div>
  12. </div>';
  13.  
  14. $pattern = '|<div class="adres"><a href="(.*)"><strong>(.*)</strong>(.*)<br /></a>
  15. (.*)</div>
  16. <div class="telefon">tel. <br />(.*)</div>|';
  17. preg_match_all($pattern, $string, $matches);
  18. print_r($matches);
  19. ?>
Ulysess
  1. <?
  2. $page = file_get_contents("http://skokwesola.pl/onas/oddzialy.html");
  3.  
  4. $wzor = '~<div class="adres"><a href=".*"><strong>(.*) </strong>(.*)<br /></a>~';
  5.  
  6. preg_match_all($wzor, $page, $matches);
  7. print_r($matches);
  8. ?>

do wzoru doklejaj sobie kolejne linie i sprawdzaj czy aby na pewno działa bo od razu cały wrzucić to na 100% nie zadziała
evolucja
Z jedną linijką jeszcze łatwiej bo tam nie ma tych tabulatorów.
A tak wystarczy, że dodam do wzoru mały fragment i już kompletnie nic nie znajduje, np:
  1. $wzor = '~<div class="adres"><a href=".*"><strong>(.*) </strong>(.*)<br /></a>
  2. (.*) </div>
  3. <div class="telefon">~';
everth
SimpleXML, ew. DOMDocument + loadHTML + XPath i wyciągasz co chcesz. SimpleXML czasem psioczy jak dostaje źle sformatowany HTML ale wtedy masz tą drugą klasę i jej metodę loadHTML. Obie klasy mają podobną funkcjonalność i konwertują się między sobą, więc czego użyjesz zależy już od ciebie.
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.