替换大括号并将内部处理为变量

时间:2014-01-20 10:48:39

标签: php regex preg-replace

我有以下问题。 我需要根据用户设置的环境(货币)显示以下内容:

$sMyPromotion = 'this offer starts at {5000}';

// 5000 is the value in my default currency (euros for example) and
// needs to be converted to the user currency
// so I have a function that converts : convertRate($Price, $aCurrency) 
//  that returns for example: 6000 USD.

但我仍然坚持如何处理花括号和括号之间的内容,并将其替换为convertRate返回的内容,因为我对regexp不熟悉,preg ...

我需要做的事情:

$sOccurency = what is between curly brackets and the brackets;

$sMyPromotion = Replace $sOccurency  with convertRate($sOccurency, $aCurrency);

所以在这个例子中:     $ sMyPromotion ='此优惠从{5000}开始;

预期结果:     $ sMyPromotion ='此优惠从6000美元开始;

3 个答案:

答案 0 :(得分:1)

$sMyPromotion = preg_replace('@{(\d+)}@', '\\1$', $sMyPromotion);

或使用preg_replace_callback:

$sMyPromotion = preg_replace_callback ( '@{(\d+)}@', 
        function ($matches)
        {

            return $matches [1] . '$';

        }, $sMyPromotion );

答案 1 :(得分:0)

为什么不把变量放入字符串?喜欢$sMyPromotion = 'this offer starts at '.$valueYouNeed;

答案 2 :(得分:0)

这个问题比我想象的要复杂一点。最明显的是,你必须处理你想要处理的所有货币的汇率。

和我一起 - 我以前从未写过一个php程序,但我想尝试一下,所以这是我的尝试;)

function TranslateRate($str, $currency)
{
    $def_rate = 100;

    if (!preg_match('/\{(\d+)\}/', $str, $value))
        return $str; // Noting to translate

    if ($currency = '$')
    {
        $dollar_rate=120;

        $val_rate = ($value[1] / $def_rate);

        return preg_replace('/(\{\d+\})/', $val_rate*$dollar_rate, $str);
    }

    // 'Unknown currency';

    return $str;
}

echo TranslateRate("this offer starts at {5000}", '$');

这是您的翻译例程的一个非常粗略的版本,但它应该让您了解如何继续。

我甚至不知道如何在php中使用浮点运算,所以费率是美分;)

看到它正常工作at phpfiddle

此致