Php 在整个字符串中使用preg_随机替换$limit,而不仅仅是第一个$limit匹配?

Php 在整个字符串中使用preg_随机替换$limit,而不仅仅是第一个$limit匹配?,php,preg-replace,Php,Preg Replace,我希望preg_只替换一个字符串的部分3次,但是我不希望它匹配并只替换前3次匹配,而是在整个字符串中变化更大。这可能吗 例如: $post ['post_content']=preg_replace ('/ pizza /',' <a href="http://www.example.com">pizza</a> ',$post['post_content'],3); 使用类似的方法可能需要进行一些调整: $p = $post ['post_content'];

我希望preg_只替换一个字符串的部分3次,但是我不希望它匹配并只替换前3次匹配,而是在整个字符串中变化更大。这可能吗

例如:

$post ['post_content']=preg_replace ('/ pizza /',' <a href="http://www.example.com">pizza</a> ',$post['post_content'],3);

使用类似的方法可能需要进行一些调整:

$p = $post ['post_content'];
    if (preg_match_all('/ pizza /',$p, $matches)) {
    $rand = array_rand($matches[0], 2);
      foreach($rand as $rand_key) {
        $p=replace_num($matches[0][$rand_key], "XXX",$p, $rand_key+1);
      }

    }


    echo $p;

    function replace_num($from, $to, $string,$num) {
      $pos=-1;
      $i=0;
       while($pos!==false && $i<$num) {
            $pos = strpos($string, $from, $pos+1);
             $i++;
       }     
       if ($pos) {
         return substr($string, 0, $pos) . str_replace($from, $to, substr($string,$pos, strlen($from))) .  substr($string, $pos) ;

       }


    return $string;

    }

我想你能做到。但这将是一个多步骤的过程

第一:进行预匹配,而不是替换 第二:使用X个数组随机数来获取“pizza”字符串的位置,并使用子字符串替换从该位置开始的一个

我认为每次替换后都必须重新进行匹配,因为字符串的长度每次都会改变


不要忘记删除从数组rand返回的索引,这样它就不会被使用两次。

跳过第四个参数,即限制n通过第一个参数

美元限额:
每个主题字符串中每个模式的最大可能替换。默认为-1无限制。

谢谢!我只是需要一点帮助来理解这一切背后的逻辑: