PHP Regex匹配以下字符串示例

时间:2012-04-20 00:39:26

标签: php regex preg-match

我的主题看起来像这样:

[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

我需要创建一个匹配

的多维数组
  • 成功/失败
  • 描述符(s-a24,s-d28等)
  • 后面的5行数字(可以是任意长度)

可能有0到5行(5行是SUCCESS)

我在正则表达式中绝对无能为力

我开始的是这个,它不起作用。

preg_match_all("/\[[0-9]+\](.*?)\[[0-9]+\]/",$output,$array);

5 个答案:

答案 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)

(\[\d*\].*\[(SUCCESS|FAILURE)\]\s(s-.{3}).*(\r[\d\.]+){0,5})

http://regexr.com?30n45

这个正则表达式应该可行。

答案 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
        )

)