preg_replace_all () связанная проблема - PullRequest
2 голосов
/ 04 января 2012

В настоящее время я делаю класс BBCode для своего сайта. Мне нужно сделать следующее.

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

Функция bbCode должна заменить все Q между тегами [skill] и [/ skill] и заменить их значением $ skillArray ['Q']. ($ skillArray зависит от символа.)

Как я могу это сделать?

Немного более понятная версия:

  1. Например, вы находитесь на странице персонажа "Орк".
  2. Тег [skill] Q [/ skill] должен автоматически получать «Имя навыка Q орка».
  3. Например, вы находитесь на странице персонажа "Охотник".
  4. Тег [skill] Q [/ skill] должен автоматически получать «Имя навыка Q охотника».

Ps. Не хочу использовать взорваться.

Ответы [ 3 ]

1 голос
/ 04 января 2012

Это то, что вам нужно

$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+.

1 голос
/ 04 января 2012
<?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
?>
1 голос
/ 04 января 2012

Предполагая, что теги, которые вы хотите заменить, находятся в какой-либо форме шаблона, вы можете использовать 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 );
}

Это просто грубый пример, но если я понимаю, что вы пытаетесь сделать; это должно быть вдоль правильных линий ....

...