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);
ページ: 1
投稿者 | 投稿 |
---|---|
#1 2008 年 2 月 11 日(月) 14:35
|
|
会員
登録者: 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); |
#2 2008 年 2 月 12 日(火) 12:41
|
|
会員
登録者: 10 2007
返信数: 71
|
的外れかもしれませんが、preg_replace()を使ってみてはどうでしょう?
|
#3 2008 年 2 月 14 日(木) 18:40
|
|
会員
登録者: 12 2007
返信数: 4
|
そうですね。
$cmts = "1234-4"; $cmts = preg_replace("#([0-9]{1,8})-([0-9])#e", "\\1 * \\2", $cmts); echo "$cmts\n"; でうまく行くのでは。 |
#4 2008 年 2 月 20 日(水) 17:10
|
|
会員
登録者: 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);の時点で正しく表示されません。 |
#5 2008 年 2 月 20 日(水) 18:51
|
|
会員
登録者: 10 2007
返信数: 71
|
マニュアルのサンプルを見てみたら、2つ目の引数はダブルクォーテーションで囲ってありましたので
$cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", "dechex(\\1 * \\2)", $cmts); こんな感じでどうでしょう?(試してないので不安ですが) |
ページ: 1
日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています