1

1つの文字で区切られた一連のセグメントで構成される長い文字列があります~

例:

ST*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~IT1*Any*Characters*are*allowed*here~optional*segment*~IT1*Any*Characters*are*allowed*here~IT1*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~TDS*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~

これは、新しい行がまったくない単一の文字列であることに注意してください。読みやすくするためにフォーマットしました。

出力は次のようになります。

Array{
      [0]=>ST*Any*Characters*are*allowed*here~optional*segment*~optional*segment*

      [1]=>Array{
                 [0]=>IT1*Any*Characters*are*allowed*here~optional*segment*  
                 [1]=>IT1*Any*Characters*are*allowed*here 
                 [2]=>IT1*Any*Characters*are*allowed*here~optional*segment*~optional*segment*  
                }

      [2]=>TDS*Any*Characters*are*allowed*here~optional*segment*~optional*segment*
}

この出力は、入力文字列からどのように生成できますか?

重要なのは、これらのセグメント( ST、、)の先頭は必須であるため保証することしかできませんが、その後にランダムな数のオプションのセグメントが続く場合があります。IT1TDS

もちろん、セパレータ~はセグメント間でのみ発生し、セグメント内では発生しない場合があります。

更新:文字列を3つの部分に分解する必要があります:

  1. STの最初の出現までから始まる文字列IT1
  2. IT1nextで始まり、nextで終わる文字列のコレクションIT1
  3. 文字列の最後まで始まるTDS最後の文字列。
4

1 に答える 1

1

更新された質問に基づいて、preg_splitを使用します。

$var = '~' . "ST*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~IT1*Any*Characters*are*allowed*here~optional*segment*~IT1*Any*Characters*are*allowed*here~IT1*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~TDS*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~";

$split = preg_split('/~(ST|IT1|TDS)/', $var, -1, PREG_SPLIT_DELIM_CAPTURE);

$blocks = array('ST' => array(), 'IT1' => array(), 'TDS' => array());

for($i = 1; $i < count($split); $i+=2)
{
    $blocks[$split[$i]][] = $split[$i] . $split[$i+1];
}

var_dump($blocks);

ノート:

  1. ~は分割で物事を簡単にするために準備します
  2. 最初の分割が空になるため、$iを1として開始します

結果

array(3) {
  ["ST"]=>
  array(1) {
    [0]=>
    string(70) "ST*Any*Characters*are*allowed*here~optional*segment*~optional*segment*"
  }
  ["IT1"]=>
  array(3) {
    [0]=>
    string(53) "IT1*Any*Characters*are*allowed*here~optional*segment*"
    [1]=>
    string(35) "IT1*Any*Characters*are*allowed*here"
    [2]=>
    string(71) "IT1*Any*Characters*are*allowed*here~optional*segment*~optional*segment*"
  }
  ["TDS"]=>
  array(1) {
    [0]=>
    string(72) "TDS*Any*Characters*are*allowed*here~optional*segment*~optional*segment*~"
  }
}
于 2012-10-23T12:17:46.907 に答える