dポイントプレゼントキャンペーン実施中!

はじめまして。

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

よろしくお願いします。

A 回答 (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 );
}

参考URL:http://jp2.php.net/manual/ja/function.preg-repla …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>置換範囲が【~】までで、置換後はランダムな数字になるという認識で正しいですか?
はい、その通りです。

教えていただいたものを試してみましたが、【】ではうまくいきませんでしたので
【】を[]に変更したところ、考えていた通りに動作しました。

ユーザ関数を使用できるということは、乱数+αに応用できるんですね。
参照ページをしっかりと読み込んでみようと思います。
応用性の高さでベストアンサーとさせていただきました。
ありがとうございました。

お礼日時:2010/12/15 22:08

e修飾子を使う手もありますね



<?php
$str= 'あいうえおかきくけこ【55】さしすせと【10】たちつてと';
$pattern="/【(\d+?)】/eu";
$replacement= "rand( 1, '$1' )";
echo preg_replace( $pattern, $replacement, $str );
?>
    • good
    • 0
この回答へのお礼

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

時間を見つけてe修飾子について再度勉強してみようと思います。
ありがとうございました。

お礼日時:2010/12/15 22:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!