0

我有一个字符串,其中包含方形备份中的几个关键字,我想识别、提取和替换为其他内容:

例如:

“你将赢得[奖金]或[切片]。”

我想识别正方形内的所有术语,取这些术语并用某些值替换它们。

所以它最终应该是这样的:

“你将赢得 100 或 95%。”

有任何想法吗?

4

3 回答 3

3

小菜一碟

$search = array('[winnings]', '[slice]');
$replace = array(100, '95%');

echo str_replace($search, $replace, 'You will win [winnings] or [slice].');
于 2012-12-28T13:16:59.033 回答
1
$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;
于 2012-12-28T13:17:58.810 回答
0

如果您想使用正则表达式来查找匹配项:

$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);
于 2012-12-28T13:21:19.240 回答