日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP 4 » ereg_replace計算

ereg_replace計算

ページ: 1

投稿者 投稿
会員
登録者: 2 2008
返信数: 2
PHP 4.4.4 セーフモードです。

文字列$cmtsの中から、
正規表現
#([0-9]{1,8})-([0-9])# (#1234-4#など)
を探し、例の1234 * 4 に置き換えしたいのですが、
下のようにすると、返る結果は「」(└)になってしまいます。
どうすれば正しく1234 * 4ができるのでしょうか。
$cmts = ereg_replace("#([0-9]{1,8})-([0-9])#","\\1" * "\\2",$cmts);
会員
登録者: 10 2007
返信数: 71
的外れかもしれませんが、preg_replace()を使ってみてはどうでしょう?
会員
登録者: 12 2007
返信数: 4
そうですね。
$cmts = "1234-4";
$cmts = preg_replace("#([0-9]{1,8})-([0-9])#e", "\\1 * \\2", $cmts);
echo "$cmts\n";
でうまく行くのでは。
会員
登録者: 2 2008
返信数: 2
なるほど。
$cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", "\\1 * \\2", $cmts);
でできました。
eregでは計算などの特殊記号を使えないのですか。
では、ここでもう少し発展させてもらいますと、
\\1 や \\2 を受け取り、複雑な計算をすることは可能ですか?
可能ならば方法を教えてください。
例えば、\\1 * \\2 の結果を、16進数に変換し、その中の「E」を「X」に変換するなど。
$cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", dechex("\\1 * \\2"), $cmts);
の時点で正しく表示されません。
会員
登録者: 10 2007
返信数: 71
マニュアルのサンプルを見てみたら、2つ目の引数はダブルクォーテーションで囲ってありましたので
$cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", "dechex(\\1 * \\2)", $cmts);

こんな感じでどうでしょう?(試してないので不安ですが)

ページ: 1

日本PHPユーザ会 掲示板 » PHP 4 » ereg_replace計算

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています