views:

66

answers:

2

Hello ||||overflow crowd :) I'm afraid I couldn't find an answer anywhere, so here goes:

My code:

$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);

My expectations:

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

Long story short, I'm trying to split on every occurance of ff# or every 12 characters if there's no delimiter in sight. Alternative suggestions are welcome as well, just thought preg_split would be able to do that; I just suck at regex :(

Thanks in advance for your time!

+2  A: 

Quick, off-the-cuff solution:

$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;
}

I'm sure someone will come up with something much more elegant.

Andrew
NUE's solutions looks smaller but this one works too as it seems, thanks for that :D
Herc
+1  A: 

No regex needed. Try:

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

print_r($result);

Yields:

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

This came to mind when I tried to come up with a regex solution:

square peg

NullUserException
That's just great! Thanks!
Herc