Php 在整个字符串中使用preg_随机替换$limit,而不仅仅是第一个$limit匹配?
我希望preg_只替换一个字符串的部分3次,但是我不希望它匹配并只替换前3次匹配,而是在整个字符串中变化更大。这可能吗 例如: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'];
$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无限制。谢谢!我只是需要一点帮助来理解这一切背后的逻辑: