Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php将字符串拆分为数组_Php_Arrays_Regex - Fatal编程技术网

使用php将字符串拆分为数组

使用php将字符串拆分为数组,php,arrays,regex,Php,Arrays,Regex,如何将以下格式字符串拆分为数组 [13:05:37] [Server thread/INFO]: [0;35;1m[Server[0;35;1m] hi[m 字符串格式来自mine craft服务器,我相信格式是 [time] [thread info]: ANSICOLOROPEN[stringANSICOLORCLOSE] string EOL 我怎样才能拆分它,使数组 [0]time [1]thread info [3]ansi open [4]string [5]ansi clos

如何将以下格式字符串拆分为数组

[13:05:37] [Server thread/INFO]: [0;35;1m[Server[0;35;1m] hi[m
字符串格式来自mine craft服务器,我相信格式是

[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

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

$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 );

不确定这是否会被视为非答案,但这可能会有所帮助,所以请看这里。

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

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

preg_match_all($re, $str, $matches);
然后您可以遍历
$matches
变量,该变量是针对字符串使用的模式的可能匹配项的数组


在您的示例中,stringANSICOLORCLOSE是什么?请显示示例中的值对应于哪些字段。颜色关闭为[0;35;1m,ansi OPEN为[0;35;1m]您能否提供所有必要的值,必须为您的示例进行分析:它很复杂-有不匹配的括号,因为我理解它[time]是格式为xx:xx:xx[threadinfo]的时间:是一个以a结尾的字符串,奇怪的地方是[0;35;1m[server[0;35;1m]hi[m两次出现的[0;35;1m]之间的所有内容都是彩色文本,[m是行尾,因此[0;35;1m[server[0;35;1m]hi将呈现为[server]hi,而[server]为紫色text@Jamesp1989你已经准备好了吗?