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

由于对您的构造什么是“有效”{::}的了解有限(您可能希望更多地限制正则表达式,而不是仅仅“不{:”),以任何方式使用preg_replace_callback()

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