Wyrażenia regularne


(Jarek21 1992) #1

Witam,

Jaki tutaj wzorzec dopisać, aby wyciągnąć ze źródła strony:

http://www.4fun.tv/movie/1029.html

so.addVariable("file","/streaming/2/1347/video.flv");

tylko w zależności jaki jest adres żeby streaming/2/1347/ się zmieniało

wiem że za pomocą wyrażeń regularnych i preg_match() w php tylko nie mogę i nie umiem dobrać wzorca.

PRoszę o pomoc i kod/

Pozdrawiam


(L337 Crew) #2

Skorzystaj z tego artykułu:

http://www.programuj.com/artykuly/www/regularne.php


(Jarek21 1992) #3

Ależ ja właśnie korzystałem z tego i nadal nie rozumiem.

Dlatego proszę Was o pomoc


(Sawyer47) #4

Nie miałem styczności z wyrażeniami regularnymi w PHP, ale prawdopodobnie wystarczy

so\.addVariable\(\"file\",\"(.*?)\"\);

I masz dokładnie '/streaming/2/1347/video.flv' skonsumowane przez pierwszy nawias.


(Jarek21 1992) #5

taki błąd sie pojawia

Warning: Delimiter must not be alphanumeric or backslash in c:\usr\apache\httpd\html\a.php on line 7


(system) #6

To znaczy ze nie moze byc alfanumeryczne a-z0-9, ani zawierac /


(Sawyer47) #7

Hmm nie miałem styczności z PHP, ale podejrzewam, że trzeba podwoić backslashe tak jak w C++ i boost::regex, żeby po jednokrotnym przetworzeniu jako string dostał je jeszcze silnik wyrażeń, więc dodaj do każdego backslasha drugi, może to pomoże.


(Jarek21 1992) #8

niestety nadal to samo


(Sawyer47) #9

Coś tam poczytałem i to już powinno działać, to już gotowy string:

'/so\.addVariable\(\"file\",\"(.*?)\"\);/'

To co chcesz uzyskać jest konsumowane przez nawias.


(Airborn) #10

Prawdopodobnie pierwsze wyrażenie podane przez nr47 , jest prawidłowe, tylko autor źle je wykorzystuje. PHP obsługuje dwa standardy wyrażeń regularnych, wg. składni POSIX oraz PERL, powyższy wzorzec powinien pracować z funkcjami takimi jak np preg_match() więcej funkcji powinieneś był znaleźć tutaj http://pl.php.net/manual/pl/ref.pcre.php


(Jarek21 1992) #11

dzięki to działa.

jednak jeszcze chcę wyciągnąć to

z całego źrodła strony

robię to tak:

preg_match('/\videoPath=/\(.*?)', $p, $podaj);

print_r($podaj);

ale nie wychodzi. zwraca mi błąd:

Warning: Unknown modifier '\' in c:\usr\apache\httpd\html\a.php on line 6

Array ( )

proszę pomóżcie


(Sawyer47) #12

Gubisz się które znaki wyeskejpować.

Na obrzeżach / - tak się w Perlu oznacza się obiekty wyrażenia regularnego

Dalej, znaki z pewnej grupy trzeba poprzedzić \ (wyeskejpować :))

Nie znalazłem w źródle strony tego elementu, ale tak nie zadziała, wyrażenie regularne musi wiedzieć gdzie skończyć, w innym wypadku tutaj nie skonsumuje niczego, albo mogłoby skonsumować wszystko po '='.

Tak więc wystarczy

'/videoPath=(.*?)TU_WSTAWIĆ_OGRANICZNIK_KOŃĆOWY/'

jeżeli to jest zacytowane to wtedy powinno wystarczyć

'/videoPath=\"(.*?)\"/'

Nie jestem pewien czy w PHP trzeba eskejpować znaki ", ale to już możesz spróbować oba warianty.


(Jarek21 1992) #13

No niestety, oba warianty nie działają :confused: :frowning:

// Połączono posty.

Dokładnie ze źródła tej strony:

http://www.break.com/index/more-amazing-facts2.html

chcę wyciągnąć to:

videoPath=http://media1.break.com/dnet/media/2008/2/more-amazing-facts2.flv

(Kaka') #14

jarmiar

Rejestrując się na niniejszym forum zobowiązałeś się przestrzegać jego regulaminu. Niestety, w tym momencie łamiesz go nie tytułując poprawnie tematu. Proszę więc zapoznać się w pierwszej kolejności z całym regulaminem forum, a następnie używając przycisku zmien.gif

Proszę również o lekturę tego ogłoszenia: viewtopic.php?f=3t=213590

W przypadku zignorowania prośby temat poleci do śmietnika oraz mogą zostać wyciągnięte surowe konsekwencje.