【问题标题】:preg_replace with replacement functionpreg_replace 带替换功能
【发布时间】:2011-05-16 23:48:25
【问题描述】:

如何将preg_replace 与函数一起用作替换参数?这段代码出错了。

function getInfo($id,$slot){
  if(!$id){ return '<b>Error</b> Id Not Returned. Please contact support@site.com for more information.'; }
  $mm = mysql_query("SELECT * FROM `users` WHERE `id`='".$id."'");
  $mma = mysql_fetch_assoc($mm);
  $p = $mma[$slot];
  return $p;
  //return $id; <- Debug (Returns ID given)
}
$post = preg_replace(
  "/\[CallName]([^]]+)\[\/CallName\]/", 
  getInfo('\\1',"fullname"), 
  $post
);

【问题讨论】:

    标签: php preg-replace


    【解决方案1】:

    e 修饰符现在是 deprecated 支持 preg_replace_callback

    示例用法:

    $x = 'abcd-efg-hijk-lmnop';
    
    $x = preg_replace_callback(
      '/-(.)/', //pattern
      function($matches) { //callback
        return strtoupper($matches[1]);
      }, 
      $x //subject
    );
    
    echo $x; //abcdEfgHijkLmnop
    

    【讨论】:

    • @Jake 我只是偶然发现了这个,并认为我可以帮助未来的观众!
    【解决方案2】:

    我想你忘记了 preg_replace 函数中的 e 修饰符 (PREG_REPLACE_EVAL),这个修饰符用于将替换字符串评估为 PHP 代码。应该是这样的:

    $post = preg_replace('~\[CallName\]([^]]+)\[/CallName\]~e', 'getInfo("$1", "fullname")', $post);
    

    详情请见this manual

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 2014-04-04
      • 2011-01-24
      • 2015-08-09
      • 2021-12-20
      • 1970-01-01
      • 2019-08-17
      • 2013-05-18
      • 2015-04-14
      相关资源
      最近更新 更多