- ベストアンサー
'2/1'を'02/01'に変換
するため <?php $x=preg_replace("|(\d\d)/(\d\d)|",sprintf("%02d/%02d",$1,$2),'2/1'); echo"$x<br>"; ?> としましたがエラーになりうまくいきません どうしたらうまくいくでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
直接は、うまくいかないみたいです。 <?php preg_match("|(\d\d?)/(\d\d?)|",'2/1',$matches); $x=sprintf("%02d/%02d",$matches[1],$matches[2]); echo "$x<br>"; ?> ではどうでしょう?
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.2
>つかいものにならないということですね んと、使い物になるかどうかは、使う人によるのではないでしょうか? この場合、うまくいかないと質問者が思われるのは、評価の順序を勘違いしているからです。 通常関数は、呼び出される前に、その引数を評価してから呼び出します。 つまり、sprintf("%02d/%02d",$1,$2)の結果として作成された文字列を引数として、preg_replaceが起動されるので、その時はまだ、$1,$2が決定していない(そもそもそれを処理する関数が起動していない)からですね。 ちなみに、そういうことを考慮して、 <?php $x=eval("echo " . preg_replace("|(\d\d?)/(\d\d?)|","sprintf('%02d/%02d',$1,$2)",'2/1') . ";"); echo"$x<br>"; ?> というように書くことはできますが、かえってわかりにくいので、#1の様にするのが良いと思います。
お礼
結局Perlのように簡単にいかずに しかも$1,$2,…,\\1,\\2,… もつかいものにならないということですね ありがとうございました