[PHP-users 16801]Re: 置換時の関数の利用方法

Morikazu Yasuhara yasuhara @ m-ripple.com
2003年 7月 18日 (金) 00:49:32 JST


安原です。

>  Setoです。
>
> えーと 正規表現のパターンこそ違いますが私の環境では
> 以下のスクリプトでテスト確認できてます。
> <?php
> function test_func($a) {
>  return $a.'s';
> }
> $string = 'there are pen';
> 
> echo eregi_replace("(pen)", "\\1s", $string);
> echo '<br>';
> 
> echo eregi_replace("(pen)", test_func("\\1"), $string);
> echo '<br>';
> ?>
> 
> 出力結果
> there are pens
> there are pens


上記プログラムを動作させたところ正常に動作しました。
申し訳ございません。違うところに原因があるようです。

原因は分からないのですが、下記プログラムで動作させる
と動作しません。

<?php
function test_func($num) {
	return pack("n", $num);
}

$string = "&#63647;て&#63648;す&#63649;と&#63650;";

// 1出力結果 &#63647;て&#63648;す&#63649;と&#63650;
echo $string . "\n";

// 2出力結果 63647%て63648%す63649%と63650%
echo eregi_replace("&#(.....);", "\\1%", $string) . "\n";

// 3出力結果 てすと
echo eregi_replace("&#(.....);", test_func("\\1"), $string) . "\n";

// 410進のコードをimodeの絵文字に変換して出力
echo preg_replace('/&#(.....);/e','test_func(\'\\1\')',$string) . "\n";
?>


3がSetoさんにご教授いただいた方法ですが、4と同じ
結果になりません。(実現したかったのは4の動作)
ただ、2は正常に動作しているので正規表現自体は間違
っていないと思うのですが。

全く検討違いのことでしたら申し訳ございません。

ちなみにこちらの環境は下記のようになっております。
RedHat8.0
Apache1.3.27
PHP4.3.2


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