PHP, регулярное выражение и анализ игровых журналов - PullRequest
0 голосов
/ 14 декабря 2011
INFO_MAP name:"mapname" version:"1.2.3"
INFO_SETTINGS mode:"Mode_Normal" options:"Option_None"
PLAYER_CONNECT player:0 name:"testname" id:1231231 psr:1000.00
PLAYER_TEAM_CHANGE player:0 team:2
ITEM_PURCHASE time:0 x:13906 y:13485 z:110 player:2 team:2 item:"Item_ItemName" cost:250
ABILITY_UPGRADE time:0 x:13906 y:13485 z:110 player:2 team:2 name:"Ability_Example1" level:1 slot:2
ITEM_PURCHASE time:0 x:13869 y:13740 z:110 player:1 team:2 item:"Item_AnotherItem" cost:100
PLAYER_CHAT player:3 target:"team" msg:"Test Message with Spaces"

У меня есть гейм-логи этого стиля, которые я должен анализировать через PHP. Какой самый эффективный способ получить что-то полезное из них, текущая система strstr + explodes действительно ужасна, написана предыдущими разработчиками. Я думаю о регулярном выражении, но не могу заставить что-либо работать.

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Такое регулярное выражение должно работать:

^([^\s]+)(\s+([^:]+):("[^"]+"|[^\s]+))+

Немного изменен для PHP (работает для меня с PHP версии 5.1.6):

<?php
$pattern = '/([^\s]+)?(\s+([^:]+):("[^"]+"|[^\s]+))/';
$file_handle = fopen("logfile", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   preg_match_all($pattern, $line, $matches);
   print_r($matches);
}
fclose($file_handle);
?>
0 голосов
/ 14 декабря 2011

Я бы работал через журнал построчно, получая первое действие, используя substr, а затем обрабатывал остальное, используя функцию explode или preg_match_all.Если это именно то, что делали другие программисты, я думаю, что они хорошо поработали.

Возможно, я бы вообще не использовал регулярные выражения, поскольку это неэффективно, если у вас действительно большие файлы журналов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...