• ベストアンサー

置換の内容をランダムにしたいのですが

はじめまして。 早速ですが質問させてください。 「あいうえおかきくけこ【55】さしすせと【10】たちつてと......」 上記のような文字列があります。 【】の中には数字が入っています。 この【】の部分を$n、$n2...として、 それぞれの部分をrand(1, $n)で置換したいのですが、 どのようにすればいいでしょうか? 文字列の中に【】は複数あり、中身は異なる数字です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • NARH
  • ベストアンサー率82% (88/107)
回答No.1

置換範囲が【~】までで、置換後はランダムな数字になるという認識で正しいですか? それなら↓でどうでしょ? <?php $str = 'あいうえおかきくけこ【55】さしすせと【10】たちつてと'; echo preg_replace_callback( '/【\d+】/', 'randCallback', $str ); function randCallback( $matches ) { $maxVal = intval( trim( trim( $matches[0], '【' ), '】' ) ); srand(); // おまじない的初期化 return rand( 1, $maxVal ); }

参考URL:
http://jp2.php.net/manual/ja/function.preg-replace-callback.php
mogem
質問者

お礼

ご回答ありがとうございます。 >置換範囲が【~】までで、置換後はランダムな数字になるという認識で正しいですか? はい、その通りです。 教えていただいたものを試してみましたが、【】ではうまくいきませんでしたので 【】を[]に変更したところ、考えていた通りに動作しました。 ユーザ関数を使用できるということは、乱数+αに応用できるんですね。 参照ページをしっかりと読み込んでみようと思います。 応用性の高さでベストアンサーとさせていただきました。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

e修飾子を使う手もありますね <?php $str= 'あいうえおかきくけこ【55】さしすせと【10】たちつてと'; $pattern="/【(\d+?)】/eu"; $replacement= "rand( 1, '$1' )"; echo preg_replace( $pattern, $replacement, $str ); ?>

mogem
質問者

お礼

ご回答ありがとうございます。 教えていただいたものを試してみて、うまくいきました。 #e修飾子のuはマルチバイト対応のため という認識でよかったでしょうか。 時間を見つけてe修飾子について再度勉強してみようと思います。 ありがとうございました。

関連するQ&A