Przedstawienie problemu.
Mam taki przykładowy kod strony:
Chcę z niego wyciągnąć 3 tagi "div" o klasie "post" wraz z ich zawartością (np. żeby je potem podmienić na coś innego). To znaczy otrzymać:
<head> <meta name="keywords" content="" /> <meta name="description" content="" /> </head> <body> <div id="gora"> <div id="header"> <div id="logo"> </div> </div> </div> <div id="menu"> </div> <div id="page"> <div id="page2"> <div id="page3"> <div id="content"> <div class="post"> <div class="tekst"> </div> </div> <div class="post"> <div class="entry"> <div class="entry2"> <div class="entry3"> <p>bla bla bla bla bla bla</p> </div> </div> </div> </div> <div class="post"> <div class="entry"> </div> </div> </div> <div id="sidebar"> </div> </div> </div> </div> </div> <div id="footer-gora"> <div id="footer"> jakas stopka </div> </div> </body> </html>
Próba rozwiązania.
Myślałem, że będą do tego idealne wyrażenia regularne.
Tak więc mały skrypcik w php. Przy prostych tagach niezagnieżdżonych działało dobrze. Ale przy tym już nie.
I dostaję takie coś:
// wczytanie z pliku itd. wycięte
Prawie wszystko dobrze oprócz tego drugiego. Otwierają się 4 "div" a zamykają tylko 2.
Winą pewnie jest wyrażenie regularne:
Tylko nie wiem co w nim nie tak (miało działać na zasadzie wyszukania tagu "post" i potem w nim zjedzenia innych tagów do takiej samej ilości divów). Bo tak działa, a w jednym miejscu jak obok siebie jest kilka divów to wariuje (na innym przykładzie coś nie działało jak divy były w jednej linii zamykający i otwierający). Próbowałem poprawiać ale nie wychodzi...
@<div class="post">.*?(?:<div.*?</div>*?).*?</div>@s
Na anglojęzycznych stronach "czytałem", że wyrażenia regularne nie nadają się do parsowania html bo to język nieregularny. I, że lepiej byłoby użyć DOM czy XPath... Tylko, że ja tego nie umiem nic a nic. Jeśli ten problem dało by się rozwiązać DOM to mógłby ktoś podać jakiś prosty przykład z tym związany (bo tak to nawet nie wiem od czego zacząć).
A może ktoś zna po prostu jakiś gotowy program którym można podmienić zawartość znaczników html w kilkuset plikach (zamiast robić to ręcznie)? Niby to tylko potrzebne trochę bardziej rozbudowane "znajdź i zamień"...