Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]Pobieranie linii po znalezionym słowie na stronie
Forum PHP.pl > Forum > Przedszkole
Marek607
Witajcie,

Napisałem sobie prosty skrypt który szuka danego słowa na stronie:

  1. <?php
  2. $data = file_get_contents('http://www.energa-operator.pl/centrum_informacji/planowane_wylaczenia.xml?id=1000');
  3. $regex = '/Naruszewo/';
  4.  
  5. if (preg_match($regex, $data)) {
  6. echo "Nie będzie prądu ;)";
  7. } else {
  8. echo "Jest ok, prad będzie cały czas ;)";
  9. }
  10. ?>


W jaki sposób mogę po znalezieniu tego słowa pobrać linijkę przed tym slowem, linijke z tym słowem i lonijke po tym słowie?
Nie mam zbytnio pojęcia jak się do tego zabrać - myślałem o pobraniu całej strony, ponumerowaniu linijek i wtey znalezienie numeru linii i na tej podstawie pobranie przed i po - dobrze myśle?

Dzięki za porady/wskazówki.

kreatiff
Linijkę czego? Kodu? Tekstu? Sprecyzuj, a najlepiej podaj fragment tekstu/kodu z zaznaczeniem co chcesz dokładnie z niego wyciągnąć oprócz nazwy miejscowości.
Zapewne nieco bardziej rozbudowane wyrażenie regularne sobie z tym poradzi.

Zauważ też, że obecne poszukiwanie ciągu "Naruszewo" jest nieefektywne. Jeśli przeszukujemy tekst pod kątem jakiegoś ciągu (czy występuje, czy nie), wystarczy użyć strpos. Wiadomo, przy przeszukaniu raz na minutę nie robi to żadnej różnicy, ale skoro istnieją funkcje do tego stworzone, to warto z nich korzystać.
Marek607
Linijki tekstu
W przypadku "Naruszewo" chciałbym by pobrało:

Kod
Gmina Naruszewo
Drochowo ze stacji trafo S7-187
W dniu 17.06.2014r. w godz. 08:00 - 17:00


Czyli 1 linijke przed ( akurat tutaj pusta) i 2 linijki po linii z tym słowem.

O strpos poczytam, dzięki.

ziolo
Polecam bibliotekę phpQuery(https://code.google.com/p/phpquery/)

  1. include 'phpQuery-onefile.php';
  2. phpQuery::newDocumentFileHTML('http://www.energa-operator.pl/centrum_informacji/planowane_wylaczenia.xml?id=1000');
  3. $elem = pq('.dlAreas:contains("Naruszewo")');
  4. echo $elem->html().'<br/>';
  5. echo $elem->next()->html().'<br/>';
  6. echo $elem->next()->next()->html().'<br/>';
kreatiff
Marek, tam nie ma żadnej pustej linii nad nazwą miejscowości. Cała treść to paragrafy, z nadanymi stylami.
Nas interesuje jedynie kod (to jego pakujesz do zmiennej), a nie tylko widoczna treść strony.

Masz tak na szybko z pominięciem bibliotek zewnętrznych:
  1. preg_match('#Naruszewo</p><p .*?>(.*?)</p><p .*?>(.*?)</p>#su', $data, $match);
  2. echo'<pre>',var_dump($match),'</pre>';
  3. // $match[1] zawiera Drochowo...
  4. // $match[2] zawiera W dniu..., wystarczy jeszcze dodać trim, ale białe znaki do wyrażenia regularnego
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.