1

文字列の一部を3回だけ探していpreg_replaceますが、最初の3つの一致だけを一致させて置き換えるのではなく、文字列全体でより多様にしたいと考えています。これは可能ですか?

例:

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

3 に答える 3

0

次のようなものを使用します(多少の調整が必要になる場合があります)。

$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;

    }
于 2012-09-10T12:50:44.823 に答える
0

できると思います。しかし、それは複数のステップからなるプロセスになります。

最初:置換のpreg_match_all()代わりにを実行します2番目:'pizza'文字列の位置を取得し、その位置から始まるものを置換するために、X個のarray_randsを実行します(部分文字列を使用)。

文字列の長さは毎回変わるので、交換するたびに試合をやり直す必要があると思います。

配列randから返されるインデックスを削除して、2回使用されないようにすることを忘れないでください。

于 2012-09-10T12:53:28.377 に答える
0

nを制限する4番目のパラメータをスキップして最初にマニュアルを通過します

$ limit: 各サブジェクト文字列の各パターンの可能な最大置換。デフォルトは-1(制限なし)です。

于 2012-09-10T13:04:44.903 に答える