Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_match_all wycinanie zawartości ul
Forum PHP.pl > Forum > Przedszkole
mgorka92
Cześć potrzebuję z content strony wyciąć zawartościu znaczników ul ale zawartość każdego ul-a musi mieć osobny klucz mam takie wyrażenie
  1. preg_match_all('/<ul(.*)>(.*)<\/ul>/is',$t,$menu);
ale ono mi cały content wycina ten który jest między pierwszym ul a ostanim ul zamykającym dając takie wyrażenie
  1. preg_match_all('/^(<ul(.*)>)(.*)(<\/ul>)$/is',$t,$menu);
nie otrzymuję wyników. Czy może ktoś mi podpowiedzieć co źle robię?
b4rt3kk
Twoje wyrażenie szuka wszystkiego co znajduje się pomiędzy <ul> a </ul>, tak więc gdy mamy taki przykładowy kod:

  1. <ul>1</ul>
  2. <ul>2</ul>


Prawidłowymi wynikami będzie zarówno:
1
1</ul><ul>2
2

Musisz dodać warunek, że pomiędzy <ul> a </ul> nie może znaleźć się kolejne <ul> lub </ul>. Więc:

  1. preg_match_all('/<ul.*>(.*^[<ul.*>|<\/ul>])<\/ul>/is',$t,$menu);


Czy akurat to konkretne wyrażenie będzie działać? Nie wiem, nie sprawdzałem. Już sobie sam musisz potestować.
mgorka92
Testowałem niestety nie daje to rozwiązania mam ten sam wynik ;/ czy znak ^ nie powinien być wewnątrz nawiasu aby wykluczyć zawieranie ul?
b4rt3kk
Znak ^ jest przed nawiasem żeby wykluczyć to lub to. Nie kopiuj mojego wyrażenia na żywca, tylko sam popróbuj. Daj np. ^[<ul>].
-kacper.chrapa-
Witam,

Twoje wyrażenie jest poprawne ( to pierwsze ) - tylko dodaj modyfikator U (ungreedy). Domyslnie, regexp dopasowuje maksymalna ilosc znakow,
jaką moze złapać na dany wzorzec - czyli .* lapie Ci całość contentu. Ale jesli wylaczysz mu "pazernosc" - to bedzie dopasowywal jak najmniej znakow dla .* .
Czyli:
  1. $dane = '<ul class="cosik">
  2. <li>raz</li>
  3. <li>dwa</li>
  4. </ul>
  5. <p>asdasda</p>
  6. <ul class="dwa">
  7. <li>trzy</li>
  8. <li>cztery</li>
  9. </ul>';
  10.  
  11.  
  12. preg_match_all("/<ul.*>(.*)<\/ul>/Uis",$dane,$wynik);//modyfikator U - ungreedy
  13.  
  14. var_dump($wynik[1]);



Pozdrawiam ,
Kacper Chrapa
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.