Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czemu tablica jest pusta podczas pobierania danych?
Saki
post
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Witam, mam dość dziwny problem z którym męnczę się dość długo, i postanowiłem zapytać na forum.
A więc.

Mam wyrażenie regularne które tak jakby działa, ale nie dokońca.

  1. preg_match_all("#<a href=\"/Profile/user_(.*).html\">(.*)</a>
  2. (.*) <a href=\"(.*)\">(.*)</a>#", $powiadomienia_tmp, $infos);


Podczas pobierania danych przez curl i przepuszczenie ich przez to wyrażenie regularne to tablica jest pusta.
Nawet gdy zapisze dane pobrane przez curl do MySQL i próbuje przepuscić źródło strony z MySQL to tablica też jest pusta.

Ale gdy źródło strony znajduje się w zmiennej na stronie to wyrażenie regularne działa.
Tutaj źródło strony: http://www.pastebin.pr0geek.com/view/5120ff09

Działa tylko kiedy zrobię:

  1. $strona = "CALE ŹRÓDŁO STRONY TUTAJ";
  2.  
  3. preg_match_all("#<a href=\"/Profile/user_(.*).html\">(.*)</a>
  4. (.*) <a href=\"(.*)\">(.*)</a>#", $strona, $infos);
  5.  
  6. print_r($infos); //pokazuje to co ma pokazywać
  7.  


Bardzo proszę o pomoc aby działało też to:

  1. $sql=mysql_query("SELECT * FROM tmp LIMIT 1");
  2. while($row=mysql_fetch_array($sql))
  3. {
  4. $powiadomienia_tmp = $row['tmp'];
  5. }
  6.  
  7. preg_match_all("#<a href=\"/Profile/user_(.*).html\">(.*)</a>
  8. (.*) <a href=\"(.*)\">(.*)</a>#", $powiadomienia_tmp, $infos);
  9.  
  10. print_r($infos); // pokazuje pustą tablice


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A powiedz co robi preg_match_all?


--------------------
Go to the top of the page
+Quote Post
Saki
post
Post #3





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Cytat(wookieb @ 20.02.2012, 07:29:02 ) *
A powiedz co robi preg_match_all?


Mam kilka elementów i chce aby każdy był w tabeli dlatego używałem preg_match_all

Wiesz może jak to naprawić aby działało?smile.gif
PS. to mi działa:

  1. preg_match_all("#<span class=\"data\">(.*)</span>#", $powiadomienia_tmp, $data);
  2. preg_match_all("#<input type=\"hidden\" name=\"notification_id\" value=\"(.*)\"/>#", $powiadomienia_tmp, $id);


tylko to nie działa:

  1. [php] preg_match_all("#<a href=\"/Profile/user_(.*).html\">(.*)</a>
  2. (.*) <a href=\"(.*)\">(.*)</a>#", $powiadomienia_tmp, $infos);
[/php]

Ten post edytował Saki 20.02.2012, 07:45:59


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Zamiast bawić się wyrażeniami, radzę ci pobawić się DOM'em, który również pobierze ci tablicę wszystkich elementów które "dopasuje".
Go to the top of the page
+Quote Post
Saki
post
Post #5





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Cytat(by_ikar @ 20.02.2012, 08:27:08 ) *
Zamiast bawić się wyrażeniami, radzę ci pobawić się DOM'em, który również pobierze ci tablicę wszystkich elementów które "dopasuje".


A wierz jak to zrobić moim przykładem? Bo moje wyrażenie regularne działa, ale nie działa podczas pobierania przez curl czy mysql.

Jak zrobić wyrazenie regularne z wieloma liniami?
  1. preg_match_all("# </div>
  2. <a href=\"/Profile/user_([0-9]*).html\">(.*)</a>
  3. (.*) <a href=\"(.*)\">(.*)</a>
  4.  
  5. <br />#", $powiadomienia_tmp, $infos_more);


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
piotr.mroczek
post
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 6
Dołączył: 22.08.2011
Skąd: Warszawa

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


poczytaj o flagach. jest w dok. polecenia na php.net
potrzebna Ci jest flaga która kwalifikuje znak nowej lini do . we wzorcu.
Go to the top of the page
+Quote Post
by_ikar
post
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat
A wierz jak to zrobić moim przykładem?


http://simplehtmldom.sourceforge.net/ jak pobierzesz, znajdziesz w przykładach jak możesz pobrać to czego ci potrzeba. Jeżeli szukany element nie zawiera jakiegoś identyfikatora, którego mógłbyś się złapać, próbuj łapać rodzica tego elementu, a następnie pobrać dopiero ten element.

A w twoim przypadku, o ile szukasz tylko linków, taki kod może wyglądać tak:

  1. // Find all links
  2. foreach($html->find('a') as $element)
  3. echo $element->href . '<br>';


Jeżeli mimo wszystko chciałbyś to zrobić w wyrażeniu regularnym, można byto zrobić tak: http://gskinner.com/RegExr/?302gn zaznaczone są elementy które zostaną złapane. Twój kod php może wyglądać tak:

  1. preg_match_all('#<a href="([^>]+)"[^>]*>([^<]+)</a>#s', $str, $matches);
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 19:04