我的主题看起来像这样:
[9] 20:30:40 [SUCCESS] s-a24:1337
2
8.87
4038047
35320
4002727
[10] 20:30:40 [SUCCESS] s-d28:1337
2
2.64
4038047
37363
4000684
[11] 20:30:40 [SUCCESS] s-b29:1337
2
0.56
4038047
33066
4004981
[66] 20:30:42 [FAILURE] s-b25:1337 Timed out, Killed by signal 9
2
1.16
4038047
35274
[67] 20:30:42 [FAILURE] s-b30:1337 Timed out, Killed by signal 9
我需要创建一个匹配
的多维数组可能有0到5行(5行是SUCCESS)
我在正则表达式中绝对无能为力
我开始的是这个,它不起作用。
preg_match_all("/\[[0-9]+\](.*?)\[[0-9]+\]/",$output,$array);
答案 0 :(得分:2)
我不确定一个简单的正则表达式是什么方式,特别是考虑到每条记录的数据变量计数。
那么,拆分字符串怎么样?
通过在每个换行符后面拆分它后跟一个“[”并在每个换行符中拆分每个结果,你可以用一个简单的正则表达式评估结果的每一行,并轻松添加数值数据,如果有的话是的。
此致 STEFAN
答案 1 :(得分:0)
这对我有用:
<?php
$str = '[9] 20:30:40 [SUCCESS] s-a24:1337
2
8.87
4038047
35320
4002727
[10] 20:30:40 [SUCCESS] s-d28:1337
2
2.64
4038047
37363
4000684
[11] 20:30:40 [SUCCESS] s-b29:1337
2
0.56
4038047
33066
4004981
[66] 20:30:42 [FAILURE] s-b25:1337 Timed out, Killed by signal 9
2
1.16
4038047
35274
[67] 20:30:42 [FAILURE] s-b30:1337 Timed out, Killed by signal 9';
preg_match_all("/^\[.*?\[(SUCCESS|FAILURE)\]\s(s\-\w\d{2}):1337.*?\n((.*\n){5})/m", $str, $matches, PREG_SET_ORDER);
//print_r($matches);
foreach ($matches as $match)
{
echo $match[1] . "<br>\n";
echo $match[2] . "<br>\n";
echo $match[3] . "<br>\n";
}
?>
答案 2 :(得分:0)
答案 3 :(得分:0)
快速又脏,但尝试尝试很有趣:
$success_pattern = '/\[(SUCCESS|FAILURE)\]/';
preg_match_all($success_pattern, $subject, $success_matches);
$descriptor_pattern = '/\[(SUCCESS|FAILURE)\]\s(.+?):/';
preg_match_all($descriptor_pattern, $subject, $descriptor_matches);
$numbers_pattern = '/\[.*?\n((\d+\.{0,1}\d*\n)+)/';
preg_match_all($numbers_pattern, $subject, $numbers_matches);
$output = array();
for($x = 0; $x < count($success_matches[0]); $x++) {
$output[] = array(
'success' => $success_matches[1][$x],
'descriptor' => $descriptor_matches[2][$x],
'numbers' => explode("\n", trim($numbers_matches[1][$x]))
);
}
答案 4 :(得分:0)
怎么样:
$string = '[9] 20:30:40 [SUCCESS] s-a24:1337
2
8.87
4038047
35320
4002727
[10] 20:30:40 [SUCCESS] s-d28:1337
2
2.64
4038047
37363
4000684
[11] 20:30:40 [SUCCESS] s-b29:1337
2
0.56
4038047
33066
4004981
[66] 20:30:42 [FAILURE] s-b25:1337 Timed out, Killed by signal 9
2
1.16
4038047
35274
[67] 20:30:42 [FAILURE] s-b30:1337 Timed out, Killed by signal 9
';
preg_match_all("/\[.*?\[(SUCCESS|FAILURE)\]\s+([^:]+):[^\n]+\n(?:([^[]+?)\n)?(?:([^[]+?)\n)?(?:([^[]+?)\n)?(?:([^[]+?)\n)?(?:([^[]+?)\n)?/m", $string, $matches, PREG_SET_ORDER);
print_r($matches);
<强>输出:强>
Array
(
[0] => Array
(
[0] => [9] 20:30:40 [SUCCESS] s-a24:1337
2
8.87
4038047
35320
4002727
[1] => SUCCESS
[2] => s-a24
[3] => 2
[4] => 8.87
[5] => 4038047
[6] => 35320
[7] => 4002727
)
[1] => Array
(
[0] => [10] 20:30:40 [SUCCESS] s-d28:1337
2
2.64
4038047
37363
4000684
[1] => SUCCESS
[2] => s-d28
[3] => 2
[4] => 2.64
[5] => 4038047
[6] => 37363
[7] => 4000684
)
[2] => Array
(
[0] => [11] 20:30:40 [SUCCESS] s-b29:1337
2
0.56
4038047
33066
4004981
[1] => SUCCESS
[2] => s-b29
[3] => 2
[4] => 0.56
[5] => 4038047
[6] => 33066
[7] => 4004981
)
[3] => Array
(
[0] => [66] 20:30:42 [FAILURE] s-b25:1337 Timed out, Killed by signal 9
2
1.16
4038047
35274
[1] => FAILURE
[2] => s-b25
[3] => 2
[4] => 1.16
[5] => 4038047
[6] => 35274
)
[4] => Array
(
[0] => [67] 20:30:42 [FAILURE] s-b30:1337 Timed out, Killed by signal 9
[1] => FAILURE
[2] => s-b30
)
)