Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_match_all
Forum PHP.pl > Forum > PHP
stein77
Z kodu strony chce wyciagnac kod formularzy. Na stronie sa dwa formularze.


some code some code some code some code
<form...
<input..
...
</form>
some code some code some code some code
<form...
<input..
...
</form>
some code some code some code some code

preg_match_all("/<form.*<\/form>/is", $page_content, $forms) zwraca w $forms tablice, ale zamiast dwoch oddzielnych stringow z formularzami, zwraca jeden, ktory rozpoczyna sie od pierwszego <form... i konczy na ostatnim </form>

Funkcja widac dziala tak, ze wyszukuje jak najwiekszy string pasujacy do wzorca. Czy macie jakis pomysl, jak wyciagnac pozadane stringi.

P.S. Zrobilem explode wzgledem "</form>" i zadzialalo, ale potem chce wyciagac imputy wszystkie i znowu jest problem, ze wyszukuje string od <input... i konczy na ostatnim znalezionym znaku ">". A bawienie sie explode w tym przypadku odpada.

Czy ktos ma jakis pomysl?
starach
("/(<form[^>]*<\/form>?)/is", $page_content, $forms) <- Nietestowane
Tłumaczenie:
[^>]* - Wszystkie znaki z wyjątkiem '>'
(...?) - Dopasuj do najbliższego wystąpienia
To znaczy <form>aaaaa</form><form>bbbbb</form> pobierze <form>aaaaa</form> zamiast całości.

Proponowałbym przejrzeć http://pl2.php.net/manual/pl/intro.pcre.php zwracając szczególną uwagę na modyfikatory.
webdice
Cytat(orglee @ 26.06.2008, 14:27:48 ) *
(...) To znaczy <form>aaaaa</form><form>bbbbb</form> pobierze <form>aaaaa</form> zamiast całości.


Po co? Od tego jest preg_match" title="Zobacz w manualu PHP" target="_manual.
viking
Nie. Od tego jest DOM
starach
Cytat(webdicepl @ 26.06.2008, 15:54:47 ) *
Nie chodzi mi o to że pobierze jedno wystąpienie tego ciągu przecież.
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.