2010-09-20 94 views
1

你好||||溢出人羣:) 我怕我找不到任何地方的答案,所以這裏有雲:使用使preg_split用分隔符或每x個字拆分

我的代碼:

$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將能夠做到這一點;我只是吮吸正則表達式:(

預先感謝您的時間

回答

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 2010-09-22 13:27:15

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

NUE的解決方案看起來小,但這個工程太,因爲它似乎,感謝的是:d – Herc 2010-09-22 13:26:17

相關問題