2

PHPに文字列があり、その文字列にパターンが出現しています%%abc%%(some substring)%%xyz%%

マスター文字列内には、このような部分文字列が複数回出現します。これらの各オカレンスは、 1〜4の整数を返すarray('substring1','substring2','substring3','substring4')aの応答に応じて、配列内の文字列に置き換える必要があります。function()

私はこれを行うための効率的な方法を理解することができません。

4

2 に答える 2

7

これは、以下を必要とする状況ですpreg_replace_callback

// Assume this already exists
function mapSubstringToInteger($str) {
    return (strlen($str) % 4) + 1;
}

// So you can now write this:
$pattern = '/%%abc%%(.*?)%%xyz%%/';
$replacements = array('r1', 'r2', 'r3', 'r4');
$callback = function($matches) use ($replacements) {
    return $replacements[mapSubstringToInteger($matches[1])];
};

preg_replace_callback($pattern, $callback, $input);
于 2012-07-16T19:27:34.387 に答える
1

preg_replace_callback()次のように使用します。

preg_replace_callback( '#%%abc%%(.*?)%%xyz%%#', function( $match) {
    // Do some logic (with $match) to determine what to replace it with
    return 'replacement';
}, $master_string);
于 2012-07-16T19:24:57.670 に答える