用正則匹配字符,如果是全部替換很簡單,使用preg_replace就可以了。但是我現在要對得到的多個匹配成功的結果,隨機替換其中的一個,這個就有點麻煩了。自己寫了個函數解決,不知道有沒有其它更好的方法。例子 “I have a dream. I have a dream. I have a dream. I have a dream.” 匹配式 '/i/'。 上面的字符串中有4個匹配結果,我只要隨機替換其中的一個。i替換成hell. 我的代碼如下: [php] //正則處理函數 function rand_replace_callback($matches) { global $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){ return $g_rand_replace_str; }else { return $matches[0]; } } //隨機正則替換函數 如果有多個匹配的單元,隨機替換其中的一個。 //注意global $g_rand_replace_num, $g_rand_replace_index, $g_rand_replace_str;這三個全局變量,不要與其它的沖突 //依賴一個正則處理函數 記錄匹配單元總數,取一個總數范圍內的隨機值,在正則處理函數中判斷相等則處理。 function rand_preg_replace($pattern, $t_g_rand_replace_str, $string) { global $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; //實際替換過程中的index $g_rand_replace_str = $t_g_rand_replace_str; echo "現在找到符合的有{$find_count}個<br>"; $ss=preg_replace_callback($pattern,"rand_replace_callback",$string); return $ss; www.2cto.com } $string = "I have a dream. I have a dream. I have a dream. I have a dream."; echo rand_preg_replace('/I/', "hell", $string); 擴展思考,我想減低第一個結果被替換的概念怎麼辦呢? 有些情況,第一個被替換不是很好,只需要少量的結果是第一個被替換。