2010-09-20 1 views
1

Hello |||| Переполнение толпа :) Я боюсь, что я не мог найти ответ в любом месте, так что здесь идет:Использование preg_split разделить с разделителем или каждые х символов

Мой код:

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

Короче говоря, я пытаюсь разделить на каждом вхождение Ф.Ф. # или через каждые 12 символов, если нет разделителей в поле зрения. Альтернативные предложения приветствуются, просто подумайте, что preg_split сможет это сделать; Я просто сосать регулярное выражение :(

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

ответ

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

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

square peg

+0

Это просто замечательно! Благодаря! – Herc

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

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

+0

решения Ню выглядит меньше, но это один работает тоже, как мне кажется, спасибо за это: D – Herc

Смежные вопросы