0

我要解析一个日志文件,我想知道如何转换这样的字符串:

[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';
4

3 回答 3

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);
?>
  • $str是要解析的字符串
  • $matches包含您需要削减的全部数据,如杀手 ID、武器、名称等。
于 2013-05-08T12:32:07.903 回答
0

你肯定需要一个正则表达式。是相关的 PHP 函数,这里是正则表达式语法参考。

于 2013-05-08T12:34:09.270 回答
0

使用函数preg_match_all()正则表达式,您将能够生成一个数组,然后您只需将其组织到您的多维数组中:

这是代码:

$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
于 2013-05-08T12:41:36.617 回答