2013-10-23 70 views
0

我有這個代碼,似乎有什麼問題,我不能讓它工作。有趣的是,如果我將/§0([^§]*)/更換爲/§2([^§]*)//§1([^§]*)/,則代碼可以工作,但其餘的不會。preg_replace |正則表達式 - 只適用於一部分

<?php 
$text = "§6Title §f- §1Bla§2Bli§4Blu"; 
$color_code = array(
'/§0([^§]*)/' => '<span style="color: #000;">' . strtoupper("$1") . '</span>', 
'/§1([^§]*)/' => '<span style="color: #0000AA;">' . strtoupper("$1") . '</span>', 
'/§2([^§]*)/' => '<span style="color: #00AA00;">' . strtoupper("$1") . '</span>', 
'/§3([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§4([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§5([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§6([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§7([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§8([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§9([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§a([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§b([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§c([^§]*)/' => '<span style="color: green;">' . strtoupper("$1") . '</span>', 
'/§d([^§]*)/' => '<span style="color: blue;">' . strtoupper("$1") . '</span>', 
'/§e([^§]*)/' => '<span style="color: blue;">' . strtoupper("$1") . '</span>', 
'/§f([^§]*)/' => '<span style="color: blue;">' . strtoupper("$1") . '</span>'); 

//echo preg_replace($suchmuster, $ersetzung, $zeichenkette); 
echo $text; 
echo '<br />'; 
echo preg_replace(key($color_code), array_shift($color_code), $text); 
?> 
+0

你想在年底什麼? –

回答

0

您必須使用preg_replace的數組來替換多個值。因此,請嘗試使用array_keys而不是key;並刪除array_shift

echo preg_replace(array_keys($color_code), $color_code, $text); 
1

這是我將如何進行:

<?php 
$text = "§6Title §f- §1Bla§2Bli§4Blu"; 

$color_code = array('#000', '#0000AA', '#00AA00', 'green', 'green', 'green', 
        'green', 'green', 'green', 'green', 
        'a'=>'green', 'b'=>'green', 'c'=>'green', 'd'=>'blue', 
        'e'=>'blue', 'f'=>'blue'); 
$pattern = '~§([0-9a-f])([^§]*)~'; 
$replacement = function ($match) use ($color_code) { 
    return '<span style="color: ' . $color_code[$match[1]] . '">' 
     . strtoupper($match[2]) . '</span>'; 
}; 
$result = preg_replace_callback($pattern, $replacement, $text); 
print_r($result); 
?> 
相關問題