2

関数の引数を提供するパターンを関数の戻り値に置き換えられるようにしたいと考えています。調べたpreg_replaceのですが、 を書くための適切なチュートリアルが見つかりませんでしたregex

例:

    <?php
      function generate($content, $type, $id){
    
         $my_onthefly_content = 'Content is '.$content.', type is '.$type.', id is '.$id;

         return $my_onthefly_content;
      }
    
      $string = '
       <div>
         Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.
           <p>
             {galery:events:30}
           </p>
         Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.
       </div>';
    
    ?>

次のような文字列を出力したい:

<div>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.
    <p>
      Content is galery, type is events, id is 30
    </p>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.
</div>
4

2 に答える 2

1

次の正規表現を使用できます。

\{(.*?):(.*?):(.*?)\}

説明:

  • \{:{一致するようにエスケープする必要があります
  • (.*?):(.*?):(.*?): すべてを : に一致させてキャプチャします。
  • \}:}一致するようにエスケープする必要があります

明確な文字列の例:

$string = ' Some Text {galery:events:30} Some Text ';

パターンと一致するかどうかを確認します。

if(preg_match_all("/$regexp/siU", $string, $matches)) {
  print_r($matches);
 }

はい、そうです!

実際の作業例:

http://viper-7.com/EdNUFm

さらにサポートや説明が必要な場合は、お知らせください。

于 2013-08-11T20:37:35.910 に答える
0

コンストラクトに対して何が「有効」であるかについての限られた知識がある場合 (正規表現を「not or 」{::}だけに制限する必要がある場合があります)、使用する方法に関係なく、次のようにします。{:preg_replace_callback()

echo preg_replace_callback(
    '/\{([^}:]+):([^}:]+):([^}:]+)\}/',
    function($match){
         return generate($match[1],$match[2],$match[3]);
    },$string);
于 2013-08-11T20:18:21.980 に答える