Php preg_replace_all()相关问题

Php preg_replace_all()相关问题,php,function,replace,bbcode,Php,Function,Replace,Bbcode,我目前正在为我的网站制作BBCode课程。 我需要做以下工作 function bbCode([skill]Q[/skill]_________[skill]Q[/skill]_________[skill]Q[/skill]); bbCode函数必须替换[skill]和[/skill]标记之间的所有Q,并将其替换为$skillArray['Q']值。($skillArray取决于角色。) 我该怎么做 更清晰的说法是: 例如,你在“兽人”角色的页面上 [skill]Q[/skill]标签应自动

我目前正在为我的网站制作BBCode课程。 我需要做以下工作

function bbCode([skill]Q[/skill]_________[skill]Q[/skill]_________[skill]Q[/skill]);
bbCode函数必须替换[skill]和[/skill]标记之间的所有Q,并将其替换为$skillArray['Q']值。($skillArray取决于角色。)

我该怎么做

更清晰的说法是:

  • 例如,你在“兽人”角色的页面上
  • [skill]Q[/skill]标签应自动获得“兽人的Q技能名称”
  • 例如,你在“猎人”角色的页面上
  • [skill]Q[/skill]标签应自动获得“猎人的Q技能名称”

  • 注:不想使用explode。

    假设要替换的标记在某种形式的模板中,可以使用file\u get\u内容,然后循环使用所需值替换标记,例如:

    $file = file_get_contents ( 'yourfile.php' );
    
    $skillArray = array ( 'Q' => 'Hunter name' );
    
    foreach ( $skillArray as $key => $val )
    {
        $file = str_replace ( '[skill]' . $key . '[\skill]', $val, $file );
    }
    
    这只是一个粗略的例子,但如果我理解你想做什么;这应该是正确的……这就是你需要的

    $data = "[skill]Q[/skill]_________[skill]Q[/skill]_________[skill]Q[/skill]";
    $r['Q'] = "Yahoo";
    function b($a){
        global $r;
        return $r[$a[1]];
    }
    $data = preg_replace_callback('|\[skill\](Q)\[\/skill\]|', 'b' , $data);
    var_dump($data);
    

    如果您想将所有
    Q
    s替换为单个“Yahoo”,请使用
    Q+
    而不是
    Q
    。如果要匹配所有单词,请使用
    \w+

    是否要替换所有的Q,或者只替换
    [skill]
    [/skill]
    之间的任何内容?Q应该在[skill]和[/skill]之间。由于数组中只有一个值,因此只会循环一次。评论中可以有15个[skill]Q[/skill]BBCode。然后它将只替换第一个。

    我希望它一次替换所有的。是的,这很好,这只是一个如何实现它的示例。你可以在数组中放入你想要的任意多个项目,它会在那一段时间内循环…我同意它应该可以工作,但我希望它能与不同的函数一起工作,比如preg_replace_all()。在for循环中使用str_replace并不是我想要的@他刚刚提出了这个想法。你需要自己动手。@Shiplu是的,我知道,但是没有数组。只有一根绳子。我真的不能接受他的建议你能解释一下B函数吗?以前没有看到这样调用函数

    preg_replace_callback是否自动调用第二个字符串参数的函数?这是一个以匹配项作为参数调用的回调函数。
    <?php
    $skillArray=array('Q'=>'fishing');
    $txt="test [skill]Q[/skill]  test";
    $txt=preg_replace("#\[skill\](.*)\[\/skill\]#e",'$skillArray["$1"]',$txt);
    echo $txt; //test fishing test
    ?>