preg_split 带方括号
preg_split with square brackets
我有一个具有以下结构的日志文件:
输入:
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
我想从中获取一个数组(使用 preg_split 或 preg_match_all),如下所示:
预期输出:
[
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.'
]
尝试次数:
我已经尝试了几个小时来寻找正则表达式模式,但不幸的是我没有找到适合我的解决方案。
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 logged in”之前的 space。
preg_split("/[][]\s\S/", $logLine);
[
0 => '[2017-12-12 12:12:12:132123',
1 => 'INFO',
2 => 'ser SIMDesign successfully logged in.' //The first character of the string was removed (why?)
]
提前致谢
首先,您需要第一组括号之间的信息,但由于这些是正则表达式的特殊字符,我们将它们转义:[(.*?)]
-> \[(.*?)\]
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
^--------------------------^
然后是第二个括号,同理:[(.*?)]
-> \[(.*?)\]
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
^----^
而'the rest till the end'是(.*)$
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
^------------------------------------^
它们之间有空格(\s
):\[(.*?)\]\s\[(.*?)\]\s(.*)$
,有一个neat little demo here
我更喜欢我在上面写的答案,但是 preg_split 页面还记录了一些可以与 preg_split() 一起传递的标志,其中之一如下。我不是粉丝的原因是你 'hiding' 问题而不是修复它。
PREG_SPLIT_NO_EMPTY
If this flag is set, only non-empty pieces will be returned by preg_split().
我有一个具有以下结构的日志文件:
输入:
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
我想从中获取一个数组(使用 preg_split 或 preg_match_all),如下所示:
预期输出:
[
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.'
]
尝试次数:
我已经尝试了几个小时来寻找正则表达式模式,但不幸的是我没有找到适合我的解决方案。
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 logged in”之前的 space。
preg_split("/[][]\s\S/", $logLine);
[
0 => '[2017-12-12 12:12:12:132123',
1 => 'INFO',
2 => 'ser SIMDesign successfully logged in.' //The first character of the string was removed (why?)
]
提前致谢
首先,您需要第一组括号之间的信息,但由于这些是正则表达式的特殊字符,我们将它们转义:[(.*?)]
-> \[(.*?)\]
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
^--------------------------^
然后是第二个括号,同理:[(.*?)]
-> \[(.*?)\]
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
^----^
而'the rest till the end'是(.*)$
$logLine = "[2017-12-23 19:15:59:634187] [INFO] User SIMDesign successfully logged in."
^------------------------------------^
它们之间有空格(\s
):\[(.*?)\]\s\[(.*?)\]\s(.*)$
,有一个neat little demo here
我更喜欢我在上面写的答案,但是 preg_split 页面还记录了一些可以与 preg_split() 一起传递的标志,其中之一如下。我不是粉丝的原因是你 'hiding' 问题而不是修复它。
PREG_SPLIT_NO_EMPTY
If this flag is set, only non-empty pieces will be returned by preg_split().