preg_match,str_replace和所有爵士乐

时间:2012-12-28 13:11:28

标签: php preg-match

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

例如:

  

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

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

所以它应该像这样结束:

  

'你将赢得100或95%。'

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

小菜一碟

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

echo str_replace($search, $replace, 'You will win [winnings] or [slice].');

答案 1 :(得分: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;

答案 2 :(得分: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);