-1

GET 文字列をいくつかの配列に分割する必要があります。文字列は次のようになります。

ident[0]=<IDENT_0>&value[0]=<VALUE_0>&version[0]=<VERSION_0>&....&ident[N]=<IDENT_N>&value[N]=<VALUE_N>&version[N]=<VERSION_N>

したがって、次のように、この文字列を 3 つおきのアンパサンド文字で分割する必要があります。

ident[0]=<IDENT_0>&value[0]=<VALUE_0>&version[0]=<VERSION_0>
ident[1]=<IDENT_1>&value[1]=<VALUE_1>&version[1]=<VERSION_1> and so on...

どうすればいいですか?どの正規表現を使用すればよいですか? または、ここでそれを行うためのより良い方法はありますか?

4

2 に答える 2

0

次のパターンでpreg_splitを使用できます。&(?=ident)

$result = preg_split('~&(?=ident)~', $yourstring);

正規表現の詳細:が続くこと&(?=ident)を意味します&ident

(?=..)チェックのみを実行し、何も一致しない先読みアサーションです。

またはpreg_match_allを使用:

preg_match_all('~(?<=^|&)[^&]+&[^&]+&[^&]+(?=&|$)~', $yourstring, &matches);
$result = $matches[0];

パターン(?<=..)の詳細: 後読みアサーションです

(?<=^|&)は、文字列の先頭またはアンパサンドが先行する^ことを意味します。
[^&]+、アンパサンドを除くすべての文字を 1 回以上意味します。アンパサンドまたは文字列の末尾が続くことを
(?=&|$)意味します。$

または、 explodeを使用してからforループを使用することもできます。

$items = explode('&', $yourstring);
for ( $i=0; $i<sizeof($items); $i += 3 ) {
    $result[] = implode('&', array_slice($items, $i, 3));
} 
于 2013-08-02T19:43:08.240 に答える