![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich forumowiczow
![]() Mam problem z preg_match_all - mianowicie chcialem napisac uniwersalny skrypt pobierajacy url do grafiki z galerii ktore kieruja tylko do duzych obrazkow, w skrocie fotki z galerii z pominieciem reklam itp mam taki kod: Kod $zmienna = file_get_contents("http://www.adresstron.com/galeria/"); preg_match_all("((<((a|A).(href|HREF|Href).[=(\"|')])([a-zA-Z0-9/\._-]*.jpg|JPG|png|PNG|jpeg|JPEG|gif|GIF)((\"|')><(img src|IMG SRC|img border=1 src)=(\"|'))([a-zA-Z0-9/\._-]*.(jpg|JPG|png|PNG|jpeg|JPEG|gif|GIF))(\"|')))",$zmienna, $matches); print_r($matches); Niestety raz wyswietla poprawnie wartosci raz nie, gdzie tkwi problem?? jesli ktos zna rozwiazanie to z gory dziekuje za pomoc! Pozdrawiam Kazaan |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
O kurde... Po pierwsze to polecam zapoznać się z przełącznikiem /i, który powoduje dopasowanie dużych i małych znaków. Więcej tu: http://uk.php.net/manual/pl/reference.pcre...n.modifiers.php
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
tak modyfikator i jako pierwszy zdecydowanie
jako drugie nie widzę tutaj ograniczników wyrażenia regualrnego, tak żeby ten modyfikator i można było gdzieś wstawić, po trzecie ([a-zA-Z0-9/\._-]*.jpg|JPG|png|PNG|jpeg|JPEG|gif|GIF) ten fragment dopasuję, jakiś ciąg znaków z końcówką jpg i to wcale przed jpg nie musi być kropki bo w regularce nie jest zacytowana, lub dopasuję inne z rozszerzeń bez nazwy pliku (prawdopodobnie) po czwarte nie zakładasz że przed adresem może się znaleźć np. title po piąte pewnie jeszcze kilku rzeczy nie zakładasz, proponuję się przebić przez tutorial do wyrażeń regularnych jeszcze raz... i napisanie sensowniejszego regexp'a... potem można patrzeć dalej |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czyli powinno to wygladac mniej wiecej tak:
Kod "/<a\s(.*)?href=(\"|')[a-z0-9/\._-]*\.(jpg|png|gif|jpeg)(\"|')><img\s(.*)?src=(\"|')[a-z0-9/\._-]*\.(jpg|png|gif|jpeg)(\"|')(\s/)?>/i" kurcze gdzies sie wdal blad do ktorego nie moge dojsc, moze ktos z Was go widzi?? wyklada mi pusty array Ten post edytował Kazaan 17.07.2008, 16:00:09 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
znacznie lepiej, ale ujawnił się nowy problem jeśli mnie pamięć nie myli:
jeżeli jakiś znak wziąłeś jako ogranicznik wyrażenia regularnego to w samym wyrażeniu regularnym musisz go cytować zatem w Twoim wypadku w regularce zamiast pisać / musisz pisać \/ albo \\/ (bo przed php chyba musimy cytować nasz znak cytowania ![]() 1. poza tym: \s wydaje mi się zbędne jako że zaraz masz (.*)? więc te białe znaki i tak zostaną dopasowane 2. być może (nie wiem z jakiego kodu chcesz to wyciagać więc trochę strzelam) przyda się modyfikator 's' który do .* może dopasować też znak nowej lini etc. wiecej w manualu 3. nie jest najlepszym pomysłem stosowanie ".*" jako że wyrażenia regularne są zachłanne proponuję zastosować np. [^>]+ zamiast \s(.*)? 4. wyrażenie regularne nie bierzę pod uwagę że coś może znajdować się po href lub src narazie to tyle Ten post edytował zimi 17.07.2008, 16:11:07 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
rozwiazanie:
Kod preg_match_all( '/(<a\s+(\w+)\s*=\s*["\']([^"]+).jpg|jpeg["\'])(.*)>(<img[^>]*src="([^"]*).jpg|jpeg")/i', $liniastrony, $matches); dzieki zimi za nakierowanie !:) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
jeśli regularka zaczęła Ci działać, to niby dobrze, ale popełniasz większość z błędów o których wspomaniałem, zalecam jeszcze raz przyjrzeć się tej regularce pod kątem tego co napisałem i zastanowić się nad tym wyrażeniem żeby się nie okazało że to rozwiązanie na krótki czas...
jest ono złe i ma wiele dziur, przetestuj sobie coś takiego ze swoim kodem: Kod $liniastrony = 'cos<a href=\'jakis\' title=\'Przedstawiony plik w formacie jpg><img src="jpeg">jpeg"ble'; pamiętaj że nie zawsze możesz liczyć na to że kody będą zgodne ze standardami, wystarczy że będą wyświetlane tak jak ktoś tego chce, nie musi być apostrofów, może jakiegoś braknie |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 11:21 |