我要解析一个日志文件,我想知道如何转换这样的字符串:
[5189192e][game]: kill killer='0:Tee' victim='1:nameless tee' weapon=5 special=0
进入某种数组:
$log['5189192e']['game']['killer'] = '0:Tee';
$log['5189192e']['game']['victim'] = '1:nameless tee';
$log['5189192e']['game']['weapon'] = '5';
$log['5189192e']['game']['special'] = '0';
最好的方法是使用函数 preg_match_all() 和 正则表达式。
例如要获取5189192e,您需要使用表达式
/[0-9]{7}e/
这表示前 7 个字符是数字,最后一个字符是 e 您可以将其更改为适合任何字母
/[0-9]{7}[a-z]+/
几乎一样,但最后的每个字母都适合
带有子模式和整体细节的更高级示例
<?php
$matches = array();
preg_match_all('\[[0-9]{7}e\]\[game]: kill killer=\'([0-9]+):([a-zA-z]+)\' victim=\'([0-9]+):([a-zA-Z ]+)\' weapon=([0-9]+) special=([0-9])+\', $str, $matches);
print_r($matches);
?>
使用函数 preg_match_all() 和 regex 您将能够生成一个数组,然后只需将其组织到多维数组中即可:
这是代码:
$log_string = "[5189192e][game]: kill killer='0:Tee' victim='1:nameless tee' weapon=5 special=0";
preg_match_all("/^\[([0-9a-z]*)\]\[([a-z]*)\]: kill (.*)='(.*)' (.*)='(.*)' (.*)=([0-9]*) (.*)=([0-9]*)$/", $log_string, $result);
$log[$result[1][0]][$result[2][0]][$result[3][0]] = $result[4][0];
$log[$result[1][0]][$result[2][0]][$result[5][0]] = $result[6][0];
$log[$result[1][0]][$result[2][0]][$result[7][0]] = $result[8][0];
$log[$result[1][0]][$result[2][0]][$result[9][0]] = $result[10][0];
// $log is your formatted array