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 に答える