0

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

"UberMedia/".base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")."fon"

base64_decode() 内のすべての文字列、つまりこの場合は次の 3 つの文字列を収集したいと思います。

1. "RWNobw=="
2. "EWNobw=="
3. "TWNobw=="

私は試した

次の正規表現で -

preg_match_all("/base64_decode\(\"(.*)\"\)/",$string,$matches);

私はこの出力を得ています -

Array
(
    [0] => base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")
    [1] => RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==
)

文字列内で最後に出現した と一致していることがわかり")ます (1 番目と 3 番目の base64_decode() 関数にまたがっています)。

base64_decode() の 3 つの出現すべてが個別に考慮され、上記のように 3 つの文字列を取得できるように変更するにはどうすればよいですか。

4

3 に答える 3

1

デフォルトでは、量指定子 (*この場合) は可能な限り一致します。?次のように、後にa を追加することで、代わりに遅延量指定子を使用できます。

base64_decode\("(.*?)"\)

または、グループのコンテンツが一致できるものを制限することをお勧めします。たとえば、次のようになります。

base64_decode\("([^"\s]*)"\)
于 2013-06-10T09:47:31.850 に答える
0

これがあなたの問題の解決策です。テストを行ったコードを貼り付けています。

$string = '"UberMedia/".base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")."fon"';

preg_match_all("/(base64_decode\(\"[A-Za-z0-9=]+\"\))/",$string,$matches);


print_r($matches);

生産します

配列 ( [0] => 配列 ( [0] => base64_decode("RWNobw==") [1] => base64_decode("EWNobw==") [2] => base64_decode("TWNobw==") )

[1] => Array
    (
        [0] => base64_decode("RWNobw==")
        [1] => base64_decode("EWNobw==")
        [2] => base64_decode("TWNobw==")
    )

)

于 2013-06-10T09:53:49.257 に答える