Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mały zgrzyt z preg_matchem :)
kovalson
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 24.08.2011

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


Witam, starannie rozglądam się w internecie, zanim o cokolwiek tutaj zapytam, bo wiem, że niektóre pytania są banalne, ale od tygodnia staram się rozwiązać problem preg_matcha. Zająłem się parsowaniem logów chatu gry (Minecraft), tak dla czystej przyjemności i w efekcie otrzymuję z logu:
  1. 2011-05-29 17:44:36 [INFO] <gracz> jakis tekst

takie coś:
  1. 2011-05-29 | 17:44:36 | SAY | gracz: | jakis tekst
Oczywiście wszystko zapisane w tabeli itd.

Jak łatwo się domyślić, znajduję znak "<", ">" oraz to co jest między nimi, żeby określić nick, a po spacji wiadomość. Preg_match wygląda tak:
  1. if(preg_match("#([0-9]{4})-([0-9]{2})-([0-9]{2})\s([0-9]{2}):([0-9]{2}):([0-9]{2})\s(\[INFO\])\s(\<)(.{1,})(\>)\s(.*)#", $line, $result))

Cały mój misterny plan ugrzązł w tym miejscu (fragment logu):
  1. 2011-05-29 17:49:37 [INFO] <gracz> jakis tekst > inny tekst


A mój skrypt parsuje to na takie coś:
  1. 2011-05-29 | 17:49:37 | SAY | gracz> jakis tekst: | inny tekst


Czyli uznaje dalszy ciąg, aż do znaku ">", jako nick, co ciekawe przed faktycznym nickiem dopisując ">", a nie po tym ciągu.

Nie mam pojęcia o co chodzi, próbowałem na wiele sposobów ograniczyć występowanie znaku ">", np. przez "{,1}", ale dalej nie chce współpracować.

Mam nadzieję, że napisałem jasno i wybaczcie, że się tak rozpisuję, ale chcę, żeby wszystko było jasne, dlatego małe wprowadzenie uznałem za stosowne. Z góry dziękuję za pomoc (IMG:style_emoticons/default/smile.gif)

Ten post edytował kovalson 14.08.2012, 22:59:30
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 25.09.2025 - 00:57