我正在寻找一种用图像替换某些字符串的方法。所有字符串都包含在{}中,当代码看到[}内部将被读取的内容时,它的内容将成为特定的图像。我不是最模糊的如何实现这一点,并希望有人能给我一个例子。
以下是我更好解释的例子:
{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一样,它将替换匹配的字符串中的所有出现?
答案 0 :(得分: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
我刚刚意识到正则表达式的字符类不能捕获所有字符,并且你需要在字符类之后使用+来捕获你的一些代码。
答案 1 :(得分:1)
Youu可以使用正则表达式解析所有{},然后str_replace它们
preg_match_all('/{(1|2|3|99|a)}/', "{1} is replaced with an image{a} {99}", $match)