0

我正在寻找一种用图像替换某些字符串的方法。所有字符串都包含在 {} 中,当代码看到 [} 时,将读取里面的内容,它等于的内容将成为特定的图像。我没有最模糊的如何实现这一点,并希望有人能给我一个例子。

这是我的示例以更好地解释:

{1} is replaced with an image

因此,当代码看到 {} 时,它将激活。现在它不会干扰代码的其他部分,它仅限于 1 个字符且仅限于某些字符。这是为了更具体的魔法卡施放成本。所以它也会受到限制......

B、U、R、G、W、X、T,例如 1-99

================================

所以......像这样的东西?

$image_string = '{R}{R}{R}{3}

$Mana_symbol ='BURGWXT1-99';

$output = preg_replace_all('/\{([' . $Mana_symbol. '])\}/', '<img src="\1.png"/>', $string);

switch ($output)
{
    case ('B'):
        $mana = '<img src = "black_mana.png"/>';
        break;
    case ('U'):
        $mana = '<img src = "blue_mana.png"/>';
        break;
    case ('G'):
        $mana = '<img src = "green_mana.png"/>';
        break;
    case ('R'):
        $mana = '<img src = "red_mana.png"/>';
        break;
    case ('W'):
        $mana = '<img src = "white_mana.png"/>';
        break;
    case ('1'):
        $mana = '<img src = "1_colorless_mana.png"/>';
        break;
    case ('2'):
        $mana = '<img src = "2_colorless_mana.png"/>';
        break;
    case ('3'):
        $mana = '<img src = "3_colorless_mana.png"/>';
        break;

        ....etc....

我不应该使用 preg_replace_all 吗,因为会有多个实例?就像上面的例子中的 $image_string 一样,它将替换字符串中匹配的所有出现?

4

2 回答 2

3

这是一个使用正则表达式的示例(请参阅http://www.php.net/pcre):

假设您的图像被称为x.png标签{x}

<?php

$string = '{1} is replaced with an image';

// Use a regular expression
// The codes below will be placed into a character class
$validCodes = 'BURGWXT0-9';

// This array contains the image transforms
$images = array(
    'B' => 'black_mana.png',
    'U' => 'blue_mana.png',
    // ...
);

// Use preg replace to insert the images
$string = preg_replace_callback(
    '/\{([' . $validCodes . ']+)\}/',
    function($m) use ($images) {
        if (isset($images[$m[1]])) {
            return '<img src="' . $images[$m[1]] . '"/>';
        }
        return '';
    },
    $string
);

echo $string;

?>

请询问您是否需要进一步说明。

编辑

我添加了一种机制,您可以通过填充数组来添加自己的转换。

preg_replace并且preg_replace_callback都将替换他们在字符串中找到的所有出现。

请注意,我使用的匿名函数仅在 PHP 5.3.0+ (http://php.net/manual/en/functions.anonymous.php) 中可用。

编辑 2

我刚刚意识到正则表达式的字符类不会捕获您的所有字符,并且您需要在字符类之后使用 + 来捕获您的一些代码。

于 2012-04-03T23:35:05.653 回答
1

您可以使用正则表达式来解析所有 {},然后 str_replace 它们

preg_match_all('/{(1|2|3|99|a)}/', "{1} is replaced with an image{a} {99}", $match)

于 2012-04-03T23:37:20.350 回答