Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenie regularne
xlinksysx
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.05.2009

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


Witam. To co sprawia wiele kłopotów - czyli wyrażenia regularne...

Znalazłem klasę, która odczytuje dane o postaciach z gry online z oficjalnej strony i wyświetla na naszej stronie.
Mam taki kod z wyrażeniami regularnymi:

  1. private function _get_character_info(){
  2. $patt = '@<TD WIDTH=20%>Name:</TD><TD>(.*?)</TD>.*?';
  3. $patt .= '<TD>Sex:</TD><TD>(.*?)</TD>.*?';
  4. $patt .= '<TD>Profession:</TD><TD>(.*?)</TD>.*?';
  5. $patt .= '<TD>Level:</TD><TD>(.*?)</TD>.*?';
  6. $patt .= '<TD>World:</TD><TD>(.*?)</TD>.*?';
  7. $patt .= '<TD>Residence:</TD><TD>(.*?)</TD>.*?';
  8. $patt .= '<TD>Last login:</TD><TD>(.*?)</TD>.*?';
  9. $patt .= 'Status:<\/TD><TD>(Premium Account|Free Account)<\/TD>.*?';
  10. $patt .= '@mis';
  11. preg_match($patt, $this->last_page, $sbp);
  12. return $this->_parse_character_info($sbp);
  13. }
  14.  
  15. /* parsuje informacje o postaci */
  16. private function _parse_character_info($arr){
  17. $out = array(
  18. 'nick' => $this->_norm_nick( $arr[1] ),
  19. 'sex' => $arr[2],
  20. 'vocation' => $arr[3],
  21. 'level' => $arr[4],
  22. 'world' => $arr[5],
  23. 'residence' => $arr[6],
  24. 'last_login' => TPF::date2date($arr[7]),
  25. 'status' => $arr[8]
  26. );
  27. return $out;
  28. }


Dane pobiera z przykładowo podstrony:
  1. http://www.tibia.com/community/?subtopic=characters&name=Morrus


Brakuje mi jednej informacji w klasie. Nie pobiera pola "House".

Domki mogą występować ze słówkiem Shop w nawiasie lub w ogóle bez. Potrzebuje pobrać dane w następujący sposób (zależnie od domku):

Przykład 1
Gdy skrypt otrzyma: House: Rathal II d (Ankrahmun) is paid until Mar 14 2010
pobierze: Rathal II d

Przykład 2
Gdy skrypt otrzyma: House: Harbour Place 1 (Shop) (Thais) is paid until Mar 15 2010
pobierze: Harbour Place 1 (Shop)

Ktoś mi kiedyś układał do tego wyrażenie regularne, działało jeżeli zastosowałem je sam, a nie dołączałem do klasy.

  1. // Brak słówka "(Shop)"
  2. $house = "#House:<\/TD><TD>([^\(]+)\(([^\(]+)\) is paid ([^<]+)?<\/TD>#i";
  3.  
  4. // Ze słówkiem "(Shop)"
  5. $shouse = "#House:<\/TD><TD>([^\(]+) \(([^\(]+)\) \(([^\(]+)\) is paid ([^<]+)?<\/TD>#i";


Gdy to dołączam do klasy - nie działa. Bardzo proszę o pomoc. smile.gif

Ten post edytował xlinksysx 26.02.2010, 14:23:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
kipero
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

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


A w jaki sposób umieszczasz ten kod w klasie?
Skoro działa poprawnie oddzielnie, to nie ma prawa przestać działać w jakimkolwiek innym miejscu.


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





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.05.2009

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


  1. private function _get_character_info(){
  2. $patt = '@<TD WIDTH=20%>Name:</TD><TD>(.*?)</TD>.*?';
  3. $patt .= '<TD>Sex:</TD><TD>(.*?)</TD>.*?';
  4. $patt .= '<TD>Profession:</TD><TD>(.*?)</TD>.*?';
  5. $patt .= '<TD>Level:</TD><TD>(.*?)</TD>.*?';
  6. $patt .= '<TD>World:</TD><TD>(.*?)</TD>.*?';
  7. $patt .= '<TD>Residence:</TD><TD>(.*?)</TD>.*?';
  8. $patt .= '<TD>Last login:</TD><TD>(.*?)</TD>.*?';
  9. $patt .= 'Status:<\/TD><TD>(Premium Account|Free Account)<\/TD>.*?';
  10. $patt .= '#House:<\/TD><TD>([^\(]+)\(([^\(]+)\) is paid ([^<]+)?<\/TD>#i';
  11. $patt .= '#House:<\/TD><TD>([^\(]+) \(([^\(]+)\) \(([^\(]+)\) is paid ([^<]+)?<\/TD>#i';
  12. $patt .= '@mis';


a później na dole:

  1. 'house' => $arr[9];
  2. 'house2' => $arr[10];


i nie działa.
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: 19.08.2025 - 16:05