【问题标题】:preg_replace_all() related issuepreg_replace_all() 相关问题
【发布时间】:2012-02-02 05:32:45
【问题描述】:

我目前正在为我的网站制作一个 BBCode 类。 我需要执行以下操作。

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

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

我该怎么做?

更清晰一点的版本是:

  1. 例如,您在“兽人”字符的页面上。
  2. [skill]Q[/skill] 标签应该自动获得“兽人的 Q 技能名称”。
  3. 例如,您在“猎人”角色的页面上。
  4. [skill]Q[/skill] 标签应该自动获得“猎人的 Q 技能名称”。

附言。不想使用爆炸。

【问题讨论】:

  • 您要替换所有 Q 还是替换 [skill][/skill] 之间的任何内容?
  • Q 应该在 [skill] 和 [/skill] 之间。

标签: php function replace bbcode


【解决方案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 );
}

这只是一个完全粗略的例子,但如果我理解你想要做什么;这应该是正确的路线......

【讨论】:

  • 这只会循环一次,因为数组中只有一个值。评论中可以有 15x [skill] Q [/skill] BBCode。它只会替换第一个。

    我希望它一次替换所有这些。
  • 是的,没关系,这只是你如何实现它的一个例子。您可以根据需要在数组中放置任意数量的项目,并且它会在这段时间内循环......
  • 我同意它应该可以工作,但我希望它可以与 preg_replace_all() 等不同的函数一起使用。在 for 循环中用 str_replace 做这件事不是我想要的。 :)
  • @AnılÜnal 他刚刚提出了这个想法。你需要自己做。
  • @Shiplu 是的,我知道,但是没有数组。只有一个字符串。对于他的建议,我真的无能为力。 :)
【解决方案2】:

这就是你需要的

$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);

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

【讨论】:

  • 你能解释一下B函数吗?以前没有看到像这样调用函数。

    preg_replace_callback 会自动调用第二个字符串参数的函数吗?
  • 这是一个以matches为参数调用的回调函数。
【解决方案3】:
<?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
?>

【讨论】:

    猜你喜欢
    • 2011-07-31
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多