我要解析一个日志文件,我想知道如何转换这样的字符串:
[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';
答案 0 :(得分:1)
最好的方法是使用函数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);
?>
答案 1 :(得分:0)
答案 2 :(得分:0)
使用 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