程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中用正則匹配多個結果,隨機替換其中一個結果

php中用正則匹配多個結果,隨機替換其中一個結果

編輯:關於PHP編程

用正則匹配字符,如果是全部替換很簡單,使用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);         擴展思考,我想減低第一個結果被替換的概念怎麼辦呢? 有些情況,第一個被替換不是很好,只需要少量的結果是第一個被替換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved