0

配列printrのように見える文字列を一致させる方法をここにリストしようとしています。

variable_data[0][var_name]

上記の例から、variable_data、0、および var_name の 3 つの文字列を取得したいと思います。上記の例はDBに保存されるため、配列の同じ構造を再作成できますが、行き詰まります。また、if ケースは、文字列 (上記のように) がその構造内にある場合を検索する必要があります。そうでない場合、preg_match は必要ありません。

注:配列には、シリアル化を解除するときに配列を壊す可能性のある文字が含まれている可能性があり、配列内のその値を完全に表示する必要があるため、その配列をシリアル化したくありません。

アプローチを知っているかもしれない正規表現のスキルを持つ人は誰ですか?

解決:

(\b([\w]*[\w]).\b([\w]*[\w]).+(\b[\w]*[\w]))

最初の2つのインデックスはスキップする必要があります...しかし、私はまだ欲しいものを手に入れています:)

4

2 に答える 2

1

無駄ではありませんが、あなたはただできませんでした..

$result = explode('[', someString);
foreach ($result as $i => $v) {
    $temp = str_replace(']'. ''. $result[$i]);
    //Do something with temp
}

明らかに、行っている内容に応じて上記を少し編集する必要がありますが、非常にシンプルで、同じ柔軟性が得られ、マッチング エンジンを呼び出す必要はありません...

ここで正規表現を構築しているとは思いません... 代わりに、 http://regexpal.com/を参照して、視覚補助付きの正規表現テスター/ビルダーを参照してください。

さらに、人々は通常、それらを適切に使用する方法を知りません。それは、他の人がそれらの表現を作成することによって助長されます.

複雑な式はパフォーマンスのオーバーヘッドが非常に大きくなる可能性があることを覚えておいてください...

それが完了したら、完成した正規表現を投稿し、最大 1337ne$$ の質問に答えてください :)

しかし、私は親切なので、あなたの報酬はここにあります:

\[.+\]\[\d+\]

また

 [a-z]+_[a-z]+\[.+\]\[\d+\]

文字列から一致させたいもの(指定しなかったもの)に応じて、すべてを想定しました

どちらも次のように実行します。

arr_var[name][0]; //Matched

arr_var[name]; //Not matched


arr_var[name][0][1];//Matched

arr_var[name][2220][11];//Matched

繰り返しますが、それらをテストし、上記のリンクで視覚的な補助を使用して理解してください。

于 2012-05-16T04:40:51.960 に答える
1

解決:

(\b([\w]*[\w]).\b([\w]*[\w]).+(\b[\w]*[\w]))

これらの2つの最初のインデックスはスキップする必要があります...しかし、私はまだ欲しいものを手に入れています:)

編集

これが改善されたものです:

$str = "variable[group1][parent][child][grandchild]";
preg_match_all('/(\b([\w]*[\w]))/', $str,$matches);
echo '<pre>';
    print_r($matches);
echo '</pre>';

// Output
Array  
        (  
            [0] => variable  
            [1] => group1  
            [2] => parent  
            [3] => child  
            [4] => grandchild  
        )
于 2012-05-17T07:38:38.793 に答える