Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]wyrażenia regularne problem
El Nino9
post 28.01.2012, 12:36:40
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 3.04.2011

Ostrzeżenie: (10%)
X----


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!

Go to the top of the page
+Quote Post
Necsord
post 28.01.2012, 12:43:23
Post #2





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
El Nino9
post 28.01.2012, 14:00:31
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 3.04.2011

Ostrzeżenie: (10%)
X----


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ć?
Go to the top of the page
+Quote Post
Necsord
post 28.01.2012, 14:50:15
Post #4





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
El Nino9
post 31.01.2012, 00:47:10
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 3.04.2011

Ostrzeżenie: (10%)
X----


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

Ten post edytował El Nino9 31.01.2012, 00:53:14
Go to the top of the page
+Quote Post
zegarek84
post 31.01.2012, 10:53:03
Post #6





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

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


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ć


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

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 Wersja Lo-Fi Aktualny czas: 14.06.2025 - 15:03