Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]problem regexp
Forum PHP.pl > Forum > PHP
jarmiar
Witam

Napisałem sobie takiego regexpa, który ma wyciągać zawartśc podanego diva ze źródła strony

Kod
%<div id="text">(.*)</div>%


tylko pojawia się problem jak zawartośc tego diva oparta jest o kilka linni.
jeśłi zawartosc tego diva jest w jednej linii to działa elegancko

wie ktoś jak można zrobić, aby zawartośc diva była pobierana nawet wtedy kiedy jest on w kilku liniach??
artega
Użyj modyfikatora s w wyrażeniu np
  1. <?php preg_match('%<div id="text">(.*)</div>%s', $foo); ?>

Tutaj znajdziesz reszte informacji smile.gif
jarmiar
W dalszym ciągu nie działa
empathon
A może by tak DOM ?
phpion
Cytat(artega @ 13.05.2008, 20:22:53 ) *
Użyj modyfikatora s w wyrażeniu np
  1. <?php preg_match('%<div id="text">(.*)</div>%s', $foo); ?>

Tutaj znajdziesz reszte informacji smile.gif

Ja bym obstawiał modyfikator m
smile.gif
artega
Drobna literówka, poprawiłem
  1. <?php 
  2. preg_match('%<div id="text">(.*)</div>%s', $foo, $matches);
  3. // dla sprawdzenia
  4. var_dump($matches);
  5. ?>
jarmiar
Niestety w dalszym ciągu nie działa

var_dump wywala mi tylko (2) { [0]=> array(0) { } [1]=> array(0) { } }

to jest ten kawałek kodu który chce wyciągnąć


<div id="text">

jakiś tekst<br>
jakiś tekst<br>

coś <br>

cos2<br>


</div>
artega
@jarmiar albo moje PHP jest "inne" albo Twoja przeglądarka używa cache
  1. <?php
  2.  
  3. $foo = <<<HEREDOC
  4. <div id="text">
  5.  
  6. jakis tekst<br>
  7. jakis tekst<br>
  8.  
  9. cos <br>
  10.  
  11. cos2<br>
  12.  
  13.  
  14. </div>
  15. HEREDOC;
  16.  
  17. preg_match('%<div id="text">(.*)</div>%s', $foo, $matches);
  18. // dla sprawdzenia
  19. var_dump($matches);
  20.  
  21. ?>

z tego wychodzi
Kod
array(2) {
  [0]=>
  string(77) "<div id="text">

jakis tekst<br>
jakis tekst<br>

cos <br>

cos2<br>


</div>"
  [1]=>
  string(56) "

jakis tekst<br>
jakis tekst<br>

cos <br>

cos2<br>


"
}
jarmiar
Nie wiem dlaczego, ale w dalszym ciągu mi to nie działa.

Kod strony pobieram za pomocą file_get_contents()

z resztą zamieszczam kod

  1. <?php
  2. $adres = "http://foncard.pl/teksty/".$w."/".$t;
  3.  
  4. echo $adres;
  5.  
  6. $open = file_get_contents($adres);
  7.  
  8. preg_match('%<div id="text">(.*)</div>%s', $open, $wynik);
  9.  
  10. var_dump($wynik);
  11. ?>


proszę sprawdzić, co źle robię i mnie poprawić.
artega
Diabeł tkwi w szczegółach... zamiast text w źródle id to jest tekst
  1. <?php preg_match('%<div id="tekst">(.*)</div>%s', $open, $wynik); ?>
empathon
@jarmiar: spójrz łaskawie na rozwiązanie które Ci podetknąłem pod nos. Jest dużo bardziej elastyczne niż regexp'y.
jarmiar
artega, Twoje rozwiązanie działa, ale nie do konca dobrze

wyciąga mi zawartość, ale nie wyłącznie tego diva lecz tekstu znajdującego się po za nim również


EDIT.

Może mi ktoś podać jakiś przykład z tej biblioteki DOM ?
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.