Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne
Forum PHP.pl > Forum > PHP
xlinksysx
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
kipero
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.
xlinksysx
  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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.