从字符串中获取数据

时间:2013-05-08 12:29:54

标签: php regex string string-search

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

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

3 个答案:

答案 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);
?>
  • $ str 是要解析的字符串
  • $ matches 包含您需要削减的所有数据,如杀手ID,武器,名称等。

答案 1 :(得分:0)

你肯定需要正则表达式。 Here是相关的PHP函数,here是正则表达式语法参考。

答案 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