[PHP-users 22024]Re: mb_ereg_replaceでパターンの特定回数マッチ

Matsuoka Toshimasa matsuoka @ shanghai-q.co.jp
2004年 6月 6日 (日) 15:02:09 JST


別解?です。

[テストコード]

<?
$in = "%%1ぬるぽ%%1ぬるぽ%1地獄先生ぬ〜べ〜 > %1";
$replace = "ドガッ";
echo preg_replace('/(%%?1)/e', '("\1"=="%%1")?"%1":$replace', $in);
?>

[出力]

%1ぬるぽ%1ぬろぽドガッ地獄先生ぬ〜べ〜 > ドガッ

パフォーマンスが心配ですが...%1だけでなく、どうせ%2,%3,%4...と使うのでし
たら、評価置換を使う価値があるかもしれないですね。

[ちょっと良い関数?]

function evalvar($str, $var_array)
{
	return preg_replace('/(%%?\d)/e', 'substr("\1",0,2)=="%%"?substr("\1",1,2):$var_array[substr("\1",1,1)]', $str);
}

$var_array[0]= "あ";
$var_array[1]= "こ";
$var_array[2]= "そ";

echo evalvar("%0のサイトの%0のスレは...%1%2%1%2...%%2", $var_array);



PHP-users メーリングリストの案内