preg_replace_all()相关问题

时间:2012-01-04 09:45:18

标签: php function replace bbcode

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

function bbCode([skill]Q[/skill]_________[skill]Q[/skill]_________[skill]Q[/skill]);

bbCode函数必须替换[skill]和[/ skill]标记之间的所有Q,并将其替换为$ skillArray [' Q']值。 ($ skillArray依赖于字符。)

我该怎么做?

更清晰的版本是:

  1. 例如,您在" Orc"的页面上字符。
  2. [技能] Q [/ skill]标签应该获得" Orc的Q技能名称"自动。
  3. 例如,您在" Hunter"的页面上字符。
  4. [技能] Q [/ skill]标签应该获得" Hunter的Q技能名称"自动。
  5. 聚苯乙烯。不想使用爆炸。

3 个答案:

答案 0 :(得分:1)

假设您要替换的标记位于某种形式的模板中,您可以使用file_get_contents,然后使用所需的值循环浏览要替换的标记,例如:

$file = file_get_contents ( 'yourfile.php' );

$skillArray = array ( 'Q' => 'Hunter name' );

foreach ( $skillArray as $key => $val )
{
    $file = str_replace ( '[skill]' . $key . '[\skill]', $val, $file );
}

这只是一个完全粗略的例子,但如果我理解你要做的事情;应该沿着正确的方向......

答案 1 :(得分:1)

这就是你需要的

$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替换为单个" Yahoo"使用Q+代替Q。如果您想匹配所有单词,请使用\w+

答案 2 :(得分:1)

<?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
?>