我有一个字符串,其中包含方形备份中的几个关键字,我想识别、提取和替换为其他内容:
例如:
“你将赢得[奖金]或[切片]。”
我想识别正方形内的所有术语,取这些术语并用某些值替换它们。
所以它最终应该是这样的:
“你将赢得 100 或 95%。”
有任何想法吗?
我有一个字符串,其中包含方形备份中的几个关键字,我想识别、提取和替换为其他内容:
例如:
“你将赢得[奖金]或[切片]。”
我想识别正方形内的所有术语,取这些术语并用某些值替换它们。
所以它最终应该是这样的:
“你将赢得 100 或 95%。”
有任何想法吗?
小菜一碟
$search = array('[winnings]', '[slice]');
$replace = array(100, '95%');
echo str_replace($search, $replace, 'You will win [winnings] or [slice].');
$replacements = array(
'winnings' => '100'
, 'slice' => '95%'
, 'foobar' => 'Sean Bright'
);
$subject = '[foobar], You will win [winnings] or [slice]!';
$result = preg_replace_callback(
'/\[([^\]]+)\]/',
function ($x) use ($replacements) {
if (array_key_exists($x[1], $replacements))
return $replacements[$x[1]];
return '';
},
$subject);
echo $result;
[[foo]
请注意,如果您有不平衡的括号(即),这将完全崩溃
对于低于 5.3 的 PHP 版本:
$replacements = array(
'winnings' => '100'
, 'slice' => '95%'
, 'foobar' => 'Sean Bright'
);
function do_replacement($x)
{
global $replacements;
if (array_key_exists($x[1], $replacements))
return $replacements[$x[1]];
return '';
}
$subject = '[foobar], You will win [winnings] or [slice]!';
$result = preg_replace_callback(
'/\[([^\]]+)\]/',
'do_replacement',
$subject);
echo $result;
如果您想使用正则表达式来查找匹配项:
$content = "You will win [winnings] or [slice].";
preg_match_all('/\[([a-z]+)\]/i', $content, $matches);
$content = str_replace($matches[0], array('100', '95%'), $content);
var_dump($content);