1

你好||||overflow crowd :) 恐怕我在任何地方都找不到答案,所以这里是:

我的代码:

$stuff = '00#00#e0#12#ff#a3#00#01#b0#23#91#00#00#e4#11#ff#a2#'; //not exact, just a random example
$output = preg_split('/(?:[a-f0-9#]{12}| ff# )/', $stuff);

我的期望:

Array
(
    [0] => 00#00#e0#12#
    [1] => a3#00#01#b0#
    [2] => 23#91#00#00#
    [3] => e4#11##
    [4] => a2#
)

长话短说,如果看不到分隔符,我会尝试在每次出现 ff# 或每 12 个字符时进行拆分。也欢迎其他建议,只是认为 preg_split 能够做到这一点;我只是很讨厌正则表达式:(

在此先感谢您的时间!

4

2 回答 2

2

快速、现成的解决方案:

$regex_output = preg_split('/ff#/', $stuff);
$output = Array();
foreach ($regex_output as $string)
{
    while (strlen($string) > 12)
    {
        $output[] = substr($string, 0, 12);
        $string = substr($string, 12);
    }

    $output[] = $string;
}

我相信有人会想出更优雅的东西。

于 2010-09-20T17:21:41.743 回答
1

不需要正则表达式。尝试:

$result = array();
foreach (explode('ff#', $stuff) as $piece) {
    $result = array_merge($result, str_split($piece, 12));
}

print_r($result);

产量:

Array
(
    [0] => 00#00#e0#12#
    [1] => a3#00#01#b0#
    [2] => 23#91#00#00#
    [3] => e4#11#
    [4] => a2#
)

当我试图提出一个正则表达式解决方案时,我想到了这一点:

方钉

于 2010-09-20T19:26:15.413 回答