1

こんにちは||||オーバーフローの群衆:) 残念ながらどこにも答えが見つからなかったので、ここに行きます:

私のコード:

$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 文字ごとに分割しようとしています。別の提案も歓迎します。私は正規表現を吸うだけです:(

お時間をいただきありがとうございます。

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 に答える