PHP、regexp和解析游戏日志

PHP、regexp和解析游戏日志,php,regex,parsing,Php,Regex,Parsing,我有这种风格的游戏日志,我必须通过PHP解析。哪一种是从中获得有用信息的最有效方法,当前的strstr+explodes系统非常糟糕,由先前的开发人员编写。我正在考虑使用regexp,但无法实现任何功能。我将通过日志逐行运行,使用substr获取第一个操作,然后使用explode或preg\u match\u all函数处理其余操作。如果这正是其他程序员所做的,我认为他们做得很好 也许我根本不会使用正则表达式,因为当您有非常大的日志文件时,正则表达式效率很低。像这样的正则表达式应该可以工作: I

我有这种风格的游戏日志,我必须通过PHP解析。哪一种是从中获得有用信息的最有效方法,当前的strstr+explodes系统非常糟糕,由先前的开发人员编写。我正在考虑使用regexp,但无法实现任何功能。

我将通过日志逐行运行,使用
substr
获取第一个操作,然后使用
explode
preg\u match\u all
函数处理其余操作。如果这正是其他程序员所做的,我认为他们做得很好


也许我根本不会使用正则表达式,因为当您有非常大的日志文件时,正则表达式效率很低。

像这样的正则表达式应该可以工作:

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做了一些更改(适用于我的PHP版本5.1.6):


if(strstrstr($log_line,$PLAYER_CONNECT'){$line=explode(“,$log_line);$id=explode(“:”,$line[1]);$name=explode(“:”,$line[2]);explode(“,$line”)的问题是PLAYER_聊天播放器:3目标:“团队”消息:“用空格测试消息”它只抓取mode+last arg/val组合。我想在PHP中,您必须使用preg_match_all并使用这个正则表达式:
([^\s]+)(\s+([^:]+):(“[^”]+“[^\s]+)
^([^\s]+)(\s+([^:]+):("[^"]+"|[^\s]+))+
<?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);
?>