代码之家  ›  专栏  ›  技术社区  ›  Jeepstone

使用preg_replace替换值

  •  0
  • Jeepstone  · 技术社区  · 14 年前

    我有一个joomla插件(在这个上下文中不重要),它设计为使用一个数字(在文本的一段内)输入并用一系列的s替换它们。

    我的问题是我需要对我的$Article->文本进行preg_替换,但我不知道如何将更改应用于匹配的条款。我见过preg_replace_回调,但我不知道如何在函数中调用它。

    function onPrepareContent( &$article, &$params, $limitstart )
        {
            global $mainframe;
            // define the regular expression
            $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
            if(isset($article->text)){
                preg_match($pattern, $article->text, $matches);
                $numbers = explode("," , $matches[1]);
                foreach ($numbers as $number) {
                    echo "<div class='number'><span>" . $number . "</span></div>";  
                }
            }else{
                $article->text = 'No numbers';
            }
            return true;
        }
    

    修改后的代码:

    function onPrepareContent( &$article, &$params, $limitstart )
        {
            global $mainframe;
            // define the regular expression
            $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
            if(isset($article->text)){
                preg_match($pattern, $article->text, $matches);
                $numbers = explode("," , $matches[1]);
                foreach ($numbers as $number) {
                    $numberlist[] = "<div class='number'><span>" . $number . "</span></div>";   
                }
                $numberlist = implode("", $numberlist);
                $article->text = preg_replace($pattern, $numberlist, $article->text);
    
            }else{
                $article->text = 'No numbers';
            }
            return true;
        }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   mck89    14 年前
    function onPrepareContent( &$article, &$params, $limitstart )
    {
        global $mainframe;
        // define the regular expression
        $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
        if(isset($article->text)){
            $article->text=preg_replace_callback($pattern,create_function('$match','$init="<div class=\'number\'><span>";$out="</span></div>"; return $init.implode($out.$init,explode(",",$match[1])).$out;'),$article->text);
    
        }else{
            $article->text = 'No numbers';
        }
        return true;
    }
    

    我没有测试过,但应该可以用