Использование preg_split для разделения с разделителем ИЛИ каждые x символов - PullRequest
1 голос
/ 20 сентября 2010

Привет |||| переполнена толпа :) Боюсь, я нигде не мог найти ответ, поэтому вот так:

Мой код:

$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 сможет это сделать;Я просто отстой в регулярное выражение: (

Заранее спасибо за ваше время!

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

Быстрое, неординарное решение:

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

Я уверен, что кто-то придумает что-то гораздо более элегантное.

1 голос
/ 20 сентября 2010

Регулярное выражение не требуется.Попробуйте:

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

Это пришло мне в голову, когда я попытался найти решение для регулярных выражений:

square peg

...