解析包含方括号路径键和 key=value 表达式的字符串并创建多维数组

问题描述 投票:0回答:3

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

[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';
php regex string text-parsing
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、武器、姓名等。

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.