通常の一致する文字を使用します。すべてを置換するのが非常に簡単な場合は、preg_replace を使用します。ただし、成功した複数のマッチング結果のうち 1 つをランダムに置き換える必要があるため、少し面倒です。それを解決するために自分で関数を書きました。他に良い方法があるかどうかはわかりません。例 「私には夢があります。私には夢があります。私には夢があります。私には夢があります。」という表現に一致します。 上記の文字列には一致する結果が 4 つあり、そのうちの 1 つをランダムに置き換えるだけです。 i を hell に置き換えます。
私のコードは次のとおりです:
[php]
//通常の処理関数
関数 rand_replace_callback($matches) {
グローバル $g_rand_replace_num、$g_rand_replace_index、$g_rand_replace_str;
$g_rand_replace_index++;
if($g_rand_replace_num==$g_rand_replace_index){
戻る
}else {
return $matches[0];
}
//ランダム定期入れ替え機能 マッチングユニットが複数ある場合、そのうちの1体をランダムに入れ替えます。
//グローバル $g_rand_replace_num、$g_rand_replace_index、$g_rand_replace_str に注意してください。これら 3 つのグローバル変数は他の変数と競合しないようにしてください
//通常の処理関数に依存します。一致したユニットの総数を記録し、その総数の範囲内でランダムな値を取得し、通常の処理関数で等しいと判断された場合に処理します。
関数 rand_preg_replace($pattern, $t_g_rand_replace_str, $string)
{
グローバル $g_rand_replace_num、$g_rand_replace_index、$g_rand_replace_str;
preg_match_all($pattern, $string, $out);$find_count = count($out[0]); // 一致するユニットの総数
$g_rand_replace_num = mt_rand(1, $find_count); //通常の検索条件を満たすコレクション
$g_rand_replace_index = 0; //実際の置換プロセス中のインデックス
$g_rand_replace_str = $t_g_rand_replace_str;
echo "現在、{$find_count} 件の一致が見つかりました
";
$ss=preg_replace_callback($pattern,"rand_replace_callback",$string);
$ss を返します
}
$string = "私には夢があります。私には夢があります。私には夢があります。";
echo rand_preg_replace('/I/', "地獄", $string);
考えを広げて、最初の結果が置き換えられるという概念を減らしたい場合はどうすればよいでしょうか? 最初に置き換えられることが良くない場合や、最初に置き換えられるためには少数の結果のみが必要な場合があります。
http://www.bkjia.com/PHPjc/477700.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/477700.html
技術記事
通常の一致する文字を使用します。すべてを置換するのが非常に簡単な場合は、preg_replace を使用します。しかし今、成功した複数のマッチング結果のうちの 1 つをランダムに置き換えたいと考えています...