用PHP将字符串拆分为数组

时间:2014-07-07 13:20:34

标签: php arrays regex

我如何将以下格式字符串拆分成数组?

[13:05:37] [Server thread/INFO]: [0;35;1m[Server[0;35;1m] hi[m

字符串格式来自矿工服务器,我相信格式是

[time] [thread info]: ANSICOLOROPEN[stringANSICOLORCLOSE] string EOL

我怎么能分裂这个数组才能

[0]time 
[1]thread info
[3]ansi open
[4]string
[5]ansi close
[6]string 
[7]EOL marker

2 个答案:

答案 0 :(得分:0)

我倾向于首先在空格上爆炸这些类型的日志条目,然后在索引值中进行硬编码,因为那些往往不会改变。例如:

$log_line = "[13:05:37] [Server thread/INFO]: [0;35;1m[Server[0;35;1m] hi[m";
$line_parts = explode(" ",$log_line);

$log_data = array(
 'time' => $line_parts[0],
 'thread_info' => $line_parts[1],
 'somethingansirelated' => $line_parts[2]
);

以各种方式从这里进一步清理各种日志数据要容易得多,例如你可以使用array_map:

array_map( function( $a ){
  // trim, format, validate, etc.

}, $log_data );

不确定这是否会被视为非答案,但是它可能有所帮助,所以你走了。

答案 1 :(得分:0)

您可以尝试使用正则表达式括起括号括起的所有项目,例如:

$re = "/\[([^\]]+)\]/"; 
$str = "[13:05:37] [Server thread/INFO]: [0;35;1m[Server[0;35;1m] hi[m]"; 

preg_match_all($re, $str, $matches);

然后你可以通过$matches变量进行迭代,该变量是与你的字符串使用的模式的可能匹配数组。

preg_match_all