Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem call_user_function z preg_match_all, lub łączenie dwóch preg_match'y
mimol
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


Witam, chciałbym zamiast :
  1. $pattern = '/countryIds=([0-9]+)/is';
  2. $data = '<li><a href="/search/film?countryIds=53">USA</a></li><li><a href="/search/film?countryIds=59">Wielka Brytania</a></li>';
  3. preg_match_all($pattern, $data , $matches);
  4. $matches = $matches[1];
  5. var_dump($matches);

Użyć to w taki sposób
  1. $pattern = '/countryIds=([0-9]+)/is';
  2. $data = '<li><a href="/search/film?countryIds=53">USA</a></li><li><a href="/search/film?countryIds=59">Wielka Brytania</a></li>';
  3. call_user_func('preg_match_all',$pattern, $data, $matches);


Niestety dostaje Parameter 3 to preg_match_all() expected to be a reference. Czy jest sposób, żeby sobie z tym poradzić.
Wymagam, żeby wszystko odbywało się poprzez call_user_func

Ewentualnie jak uzyskać Country ID z
Kod
<tr><th>produkcja:</th><td><ul class="inline sep-comma"><li><a href="/search/film?countryIds=53">USA</a></li><li><a href="/search/film?countryIds=59">Wielka Brytania</a></li></ul></td></tr>

Pobieranie wyszstkiego pomiędzy <ul>
Kod
<tr><th>produkcja:<\/th><td><ul class="inline sep-comma">(.*?)<\/ul><\/td><\/tr>

Pobieranie ID pomiędzy <li>
Kod
countryIds=([0-9]+)

Jak to połączyć w jednego regexpa??

Ten post edytował mimol 16.02.2013, 14:38:05
Go to the top of the page
+Quote Post
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(mimol @ 16.02.2013, 14:28:18 ) *
Niestety dostaje Parameter 3 to preg_match_all() expected to be a reference. Czy jest sposób, żeby sobie z tym poradzić.

tak - zrobić to co należy i czytać błędy ze zrozumieniem ]:->
  1. $pattern = '/countryIds=([0-9]+)/is';
  2. $data = '<li><a href="/search/film?countryIds=53">USA</a></li><li><a href="/search/film?countryIds=59">Wielka Brytania</a></li>';
  3. $matches = array();
  4. call_user_func('preg_match_all',$pattern, $data, &$matches);
  5. var_dump($matches);

ps. PHP o tyle jest "dziwne", że nawet jak nie zdefiniujesz zmiennej (zakomentuj "$matches = array();") to podając referencję do niezdefiniowanej zmiennej kod się wykona...

ps. wygodniej parsuje się strony przy zastosowaniu modelu DOM... w czystym PHP masz też do niego dostęp Document Object Model a jeśli chcesz korzystać z selektorów css na wzór jQuery to są biblioteki typu PHPQuery (inne poszukaj sobie w google)... a jeśli potrzebujesz przetworzone strony po JS lub z jakiegoś innego powodu chciałbyś mieć efekt tak jakbyś zarządzał przeglądarką w programie to polecam Qt WebKit (ale to już C++ i biblioteka Qt - całkiem przyjemna...)... no i różne rozwiązania na zasadzie pluginów do przeglądarek które możesz pisać w JS (zresztą w Qt też można pisać w JS podobnie jak i aplikacje na Win7)
Go to the top of the page
+Quote Post
mimol
post
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


Tak, z pewnością jeśli musiałbym pisać swoją klasę wykorzystałbym DOM, jednak znalazłem klasę która już 80% wykonuje to co potrzebuje (niestety na nieszczęsnych regexpach)
Z tego co pamiętam to próbowałem zrobić coś podobnego, ale wtedy dostawałem errora, że trzeci parametr nie może być referencją.... Jak widać musiałem coś poplątać
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 20:27