2

私はそのような文字列を持っています:

 0d(Hi)i(Hello)4d(who)i(where)540d(begin)i(began)

そして、それを配列にしたいと思います。PHP関数の爆発を使用するために、最初にセパレーターを追加しようとしました。

 ;0,d(Hi),i(Hello);4,d(who),i(where);540,d(begin),i(began)

それは機能しますが、問題は、セパレーターを最小化してディスク容量を節約したいことです。したがって、セパレータを使用せずにそのような巨大な配列を持つことが可能かどうか、preg_split、正規表現を使用して知りたいです:

 Array ( [0] => Array ( [0] => 0 [1] => d(hi) [2] => i(Hello) ) 
         [1] => Array ( [0] => 4 [1] => d(who) [2] => i(where) )
         [2] => Array ( [0] => 540 [1] => d(begin) [2] => i(began) )
       )

いくつかのコードと正規表現を試してみましたが、正規表現の値が最終結果に存在しないことがわかりました (爆発関数のように、最終配列には区切り記号がありません)。

さらに、正規表現を構築するのにいくつかの困難があります。これが私が作ったものです:

 $modif = preg_split("/[0-9]+(d(.+))?(i(.+))?/", $data); 

d() と i() が存在できないことを正確に説明する必要があります (ただし、少なくとも 1 つ)

ありがとう

4

1 に答える 1

2

もしあなたがそうするなら

preg_match_all('/(\d+)(d\([^()]*\))?(i\([^()]*\))?/', $subject, $result, PREG_SET_ORDER);

元の文字列で、配列を取得します

$result[$i][0]

i番目の一致 (つまり) とその場所$result[0][0]を含む0d(Hi)i(Hello)

$result[$i][$c]

th マッチcの th キャプチャ グループ(つまり、 is 、isおよびis ) を含みます。i$result[0][1]0$result[0][2]d(Hi)$result[0][2]i(Hello)

それはあなたが望んでいたものですか?

于 2012-07-26T08:13:28.903 に答える