- ベストアンサー
置換の内容をランダムにしたいのですが
はじめまして。 早速ですが質問させてください。 「あいうえおかきくけこ【55】さしすせと【10】たちつてと......」 上記のような文字列があります。 【】の中には数字が入っています。 この【】の部分を$n、$n2...として、 それぞれの部分をrand(1, $n)で置換したいのですが、 どのようにすればいいでしょうか? 文字列の中に【】は複数あり、中身は異なる数字です。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
置換範囲が【~】までで、置換後はランダムな数字になるという認識で正しいですか? それなら↓でどうでしょ? <?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 ); }
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
e修飾子を使う手もありますね <?php $str= 'あいうえおかきくけこ【55】さしすせと【10】たちつてと'; $pattern="/【(\d+?)】/eu"; $replacement= "rand( 1, '$1' )"; echo preg_replace( $pattern, $replacement, $str ); ?>
お礼
ご回答ありがとうございます。 教えていただいたものを試してみて、うまくいきました。 #e修飾子のuはマルチバイト対応のため という認識でよかったでしょうか。 時間を見つけてe修飾子について再度勉強してみようと思います。 ありがとうございました。
お礼
ご回答ありがとうございます。 >置換範囲が【~】までで、置換後はランダムな数字になるという認識で正しいですか? はい、その通りです。 教えていただいたものを試してみましたが、【】ではうまくいきませんでしたので 【】を[]に変更したところ、考えていた通りに動作しました。 ユーザ関数を使用できるということは、乱数+αに応用できるんですね。 参照ページをしっかりと読み込んでみようと思います。 応用性の高さでベストアンサーとさせていただきました。 ありがとうございました。