Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Preg replace - zawartość od DIVa do DIVa
Forum PHP.pl > Forum > PHP
wujek2009
Cześć.

Potrzebuje ułożyć regułę, która będzie usuwać zawartość konkretnego diva - tylko muszę pamiętać, że w tym divie mogą być inne divy.
Kod
~<div id="podsumowanie" class="podsumowanie">.+?</div>~


Ogólnie powyższa reguła działa, ale wykłada się, gdy w divie "podsumowanie" znajdzie się inny div.
Myślałem nad rozwiązaniem, aby na ostatni div (tj: </div) nadać jakiś identyfikator/klasę np. </div id="podsumowanie_koniec") i to rozwiązałoby moje problemy, ale takie rozwiązanie jest trochę amatorskie (?)
PrinceOfPersia
a nie lepiej byłoby użyć jakiegoś parsera HTML? w PHP jest klasa DOMDocument do operowania na HTMLu - http://www.php.net/manual/en/class.domdocument.php , a pewnie i jakieś inne by się znalazły...
BigPig
Cześć. Wybacz, że tak późno, ale nie miałem wcześniej czasu.

Fajny problem, nie mogłem się oprzeć pokusie by go rozwiązać. Wpadłem na trzy różne pomysły, ten, który zrealizowałem okazał się zdecydowanie najprostszy.

  1. function Oczysc($div)
  2. {
  3. $selekcja = explode("<", $div);
  4.  
  5. for($i=1;$i<count($selekcja);$i++)
  6. {
  7. if(substr($selekcja[$i],0,3) == "div" || substr($selekcja[$i],0,4) == "/div" )
  8. {
  9. $wydzielamy_div = explode(">",$selekcja[$i]);
  10. $obrobiony = "<".$wydzielamy_div[0].">";
  11. $wszystkie_divy[] = $obrobiony;
  12. }
  13. }
  14.  
  15. return $wszystkie_divy;
  16. }


1) Funkcja radzi sobie z zagnieżdżonymi div'ami
2) Zwrócone przez funkcję, odwócone div'y są tak samo pozagnieżdżane jak to było w pierwotnej wersji.

Tak odrazu uprzedzam(sam się zastanawiałem o co chodzi biggrin.gif ), że jak wrzucisz funkcję do print_r to pokaże Ci jakby do kluczy nie było nic przypisane. Jak sprawdzisz kod źrodłowy to zobaczysz, że div'y są opróżnione.
wujek2009
@PrinceOfPersia - użyłbym tej klasy, gdyby nie fakt, że źródło ma trochę elementów; więc przetworzenie tego przez DOMDocument mogłoby trochę zająć.
@BigPig - dzięki za zaangażowanie, później przetestuje ten kod i zobaczymy jak się sprawdza.
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.