Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyrażenia regularne problem
Forum PHP.pl > Forum > Przedszkole
El Nino9
witam, niedawno zacząłem dopiero poznawać wyrażenia regularne stąd więc moje problemy

  1. $string = '<a href="index.php?page=village&amp;id=88063">K24 154 Lonmar (416|214) K24</a></td><td>12,154</td><td><a class="playerlink" href="index.php?page=player&amp;id=3103268">wwiola</a> [<a class="tribelink" href="index.php?page=tribe&amp;id=53309">FC@BIL</a>]</td><td><a class="playerlink" href="index.php?page=player&amp;id=3127865">ptk222</a> [<a class="tribelink" href="index.php?page=tribe&amp;id=53309">FC@BIL</a>]</td><td>2012-01-27 - 23:47:45</td>';
  2.  
  3. $regex = '/(id[\=][0-9]{5}.[\>])(.*)[\(]([0-9]{3}[\|][0-9]{3})[\)] (K[0-9]{2})[\<\/a\>\<\/td\>\<td\>](.*)[\<\/td\>\<td\>\<a class="playerlink" href="index.php.page=player&amp;id.][0-9]+[\"\>](.*)[\<\/a\>] [\[\<a class="tribelink" href="index.php.page=tribe&amp;id=[0-9]+[\"\>](.*)[\<\/a\>\]\<\/td\>\<td\>]([0-9]{4}.[0-9]{2}.[0-9]{2} . [0-9]{2}.[0-9]{2}.[0-9]{2})[\<\/td\>]/' ;
  4.  
  5. preg_match($regex, $string, $var);


i tak zmienne
  1. $nazwa_wioski = $var[2]; //przyjmuje wartość K24 154 Lonmar
  2. $villages = $var[3]; //przyjmuje wartosc 416|214
  3. $kontynent = $var[4]; //przyjmuje wartość K24


przyjmują one wartości jakie chciałem. poźniej natomiast zaczynają się schody

  1. $var[05] //przyjmuje wartość /a>12,154wwiola [FC@BIL] natomiast chciałem by przyjęła 12,154. sądzę że wynika to z zapisu (.*), ale nie wiem w jaki sposób zapisać liczbę z przecinkiem, gdzie nie wiadomo ile cyfr będzie przed przecinkiem, ile po przecinku a także nie wiadomo czy wystąpi w ogóle przecinek
  2.  
  3. dalsze problemy to
  4. $var[06] // przyjmuje wartość >ptk222 [< natomiast chciałem otrzymać po prostu ptk222
  5.  
  6. $var[07] //przyjmuje wartość index.php?page=tribe&id=53309">FC@BIL] zamiast oczekiwanego przeze mnie FC@BIL
  7.  
  8. i wreszcie $var[08] //przyjmuje wartość id=88063">K24 154 Lonmar (416|214) K2412,154wwiola [FC@BIL]ptk222 [FC@BIL]2012-01-27 - 23:47:45< a miało wyświetlać datę

zdaję sobie sprawę że jest tu wiele błędów, ale liczę że znajdzie się jakaś dobra duszyczka i je wskaże bądź chociaż poda jakieś wskazówki co tu zmienić

pozdrawiam!

Necsord
Nie wiem do końca co ty chcesz osiągnąć tym regexp'em, ale zastanów się, czy aby na pewno chcesz tak to zrobić. Z pewnością jest lepsze, bardziej optymalne rozwiązanie niż bawienie sie w takie cuda.
El Nino9
wydawało mi się ze do takich właśnie celów służą wyrażenia regularne. w jaki inny sposób mam wyciągnąć słowa znajdujące się w danych komórkach tabeli? byc może źle zrozumiałes przeznaczenie skryptu, ma przeszukiwać całą zawartośćstrony w poszukiwaniu słów między konkretnymi komórkami tabeli. co prawda powyżej uzylem preg_match a nie preg_match_all, ale to był tylko przykład. w jaki sposób więc sobie z tym poradzić?
Necsord
Masz na przykładach:
http://stackoverflow.com/questions/4044812...t-not-in-a-link

Innym rozwiązaniem jest sscanf, ale to wszystko zalezy od sytuacji, tak czy inaczej najpierw wydobądź dane z tej tabeli, a co najwyżej potem baw sie juz prostszymi / czytelniejszymi regexp'ami.
El Nino9
poradziłem sobie z tym o co pytałem jednak za pomocą wyrażenia regularnego, nie bardzo mogłem zaczaić tamte przykłady. jeśli jednak nadal ktoś chce pokierować mnie na inną metodę to proszę o jakieś przykłady. w każdym razie do sedna, wyrażenie wygląda tak, fakt jest trochę zagmatwane ale robi to co miało robić

  1. $regex = '/(id.[0-9]+.[\>])(.*)[\(]([0-9]{3}[\|][0-9]{3})[\)] (K[0-9]{2})<\/a><\/td><td>([^<]+)<\/td><td(.*)><a class="playerlink" href="index.php.page=player&amp;id=[0-9]+">([^<]+)<\/a>\s\[<a class="tribelink" href="index.php.page=tribe&amp;id=[0-9]+">([^<]+)<\/a>\]<\/td><td><a class="playerlink" href="index.php.page=player&amp;id=[0-9]+">([^<]+)<\/a>\s\[<a class="tribelink" href="index.php.page=tribe&amp;id=[0-9]+">([^<]+)<\/a>\]<\/td><td>([^<]+)<\/td>/';

tyle że zapomniałem o jednym fakcie
w taj tabeli występują dwa różne rodzaje wierszy które różnią się tym fragmentem

  1. <td><a class="playerlink" href="index.php?page=player&amp;id=3130807">WLASCICIEL</a> [<a class="tribelink" href="index.php?page=tribe&amp;id=47058">PLEMIE</a>]</td><td><a class="playerlink" href="index.php?page=player&amp;id=3130807">GRACZ</a>


  1. <td class="hidden">WLASCICIEL</td><td><a class="playerlink" href="index.php?page=player&amp;id=3252522">GRACZ</a>


czy jest możliwe wyrażenie, które w przypadku pierwszym wyciągnie do tablicy WLASCICIEL, PLEMIE, GRACZ
a w przypadku drugim tylko WLASCICIEL, a brak pozostałych pól będzie oznaczał puste pole tablicy?

mam nadzieję że problem przedstawiłem w miarę jasno,
pozdrawiam
zegarek84
w plemionach masz wiele tabel zagnieżdżonych w innych tabelach, nieraz zmieniają strukturę... ech nie grałem już z 2 lub 3 lata ^^

do wyszukiwania informacji w drzewie DOM znacznie lepszym narzędziem od wyrażenia regularnego będzie (wybierz sobie lub poszukaj innej biblioteki która obudowuje PHP DOM):
PHP DOM
phpQuery
PHP Simple HTML DOM Parser

Po pobraniu odpowiedniej porcji informacji dopiero jeśli zachodzi potrzeba baw się z wyrażeniami regularnymi (i tak masz limit 5 akcji na sekundę ^^)

swoją drogą skorzystaj też z danych serwerowych gdzie można sobie dowolne listy ułatwiające grę z nich wygenerować
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.