Php 带方括号的preg_分割

Php 带方括号的preg_分割,php,regex,pcre,preg-split,Php,Regex,Pcre,Preg Split,我有一个具有以下结构的日志文件: 输入: $logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in." [ 0 => '[2017-12-23 19:15:59:634187]', 1 => '[INFO]', 2 => 'User SIMDesign successfully logged in.' ] 我想从中得到一个数组(使用preg_split或p

我有一个具有以下结构的日志文件:

输入

$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
[
 0 => '[2017-12-23 19:15:59:634187]',
 1 => '[INFO]',
 2 => 'User SIMDesign successfully logged in.'
]
我想从中得到一个数组(使用preg_split或preg_match_all),如下所示:

预期产出

$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
[
 0 => '[2017-12-23 19:15:59:634187]',
 1 => '[INFO]',
 2 => 'User SIMDesign successfully logged in.'
]
或者这个:

[
 0 => '2017-12-23 19:15:59:634187',
 1 => 'INFO',
 2 => 'User SIMDesign successfully logged in.'
]
尝试

$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
[
 0 => '[2017-12-23 19:15:59:634187]',
 1 => '[INFO]',
 2 => 'User SIMDesign successfully logged in.'
]
我已经尝试了几个小时寻找正则表达式模式,但不幸的是,我没有找到适合我的解决方案

preg_split("/[][]/", $logLine);

[
    0   =>  '',                                         //this is empty
    1   =>  '2017-12-23 19:15:59:634187',
    2   =>  ' ',                                        //there is a space
    3   =>  'INFO',
    4   =>  ' User SIMDesign successfully logged in.',
]
输出正常,但并不完美。 我不需要数组的空元素([0],[2])。 我需要在字符串“User SIMDesign successfully loggin”之前清除空间


首先感谢您,您需要第一组括号之间的信息,但由于这些是regex的特殊字符,因此我们将它们转义为:
[(.*?)
->
\[(.*?)]

然后是第二个括号,逻辑相同:
[(.*)]
->
\[(.*)\]

“剩下的到最后”是
(.*)$

它们之间有空格(
\s
):
\[(.*?\]\s\[(.*?\]]\s(.*)$
,带有


我更喜欢上面写的答案,但是preg_split页面还记录了一些可以随preg_split()一起传递的标志,其中一个是以下标志。我不是一个粉丝的原因是因为你“隐藏”了问题而不是解决了它

PREG\u SPLIT\u NO\u EMPTY
如果设置了此标志,preg_split()将只返回非空工件


尝试
preg\u split(“/(?:\s*[])+\s*/”,$logLine,-1,preg\u split\u NO\u EMPTY)非常好的解释。谢谢这对我来说很好:)