Preg_replace 在替换选项中给出货币字符串时给出不正确的结果

Preg_replace giving improper results when Currency Strings are given in Replace option

($1,500) 等货币字符串在替换选项中给出时,

Preg_replace 给出不正确的结果。

这是我的代码

<?php
$amount = ',500.00';
echo $amount. "<br />";
echo preg_replace('/{amount_val}/', $amount, '{amount_val}'); // it gives ",500" but i need ",500"

?>

我试过 preg_quote,请看下面的代码片段

<?php

$amount = ',500.00';
$amount = preg_quote(',500.00');
echo $amount. "<br />";
echo preg_replace('/{amount_val}/', $amount, '{amount_val}'); // it gives ",500\.00" but i need ",500"

?>

我怎样才能得到准确的结果,即 1,500.00 美元

请帮我解决这个问题。

提前致谢

简单地转义美元符号,见a demo on ideone.com:

<?php
$amount = '$1,500.00';
echo preg_replace('~{amount_val}~', $amount, '{amount_val}');
// output: ,500
?>

或者(这真的你想要什么吗???)

<?php
$amount = ',500.00';
echo preg_replace('~{amount_val}~', str_replace('$', '$', $amount), '{amount_val}');
?>

由于要替换文字字符串,因此不需要使用正则表达式:

$amount = ',500.00';
$result = str_replace('{amount_val}', $amount, $yourstring);

现在为什么用 preg_replace 得到一个奇怪的结果?

在替换字符串中,每个序列 $n 其中 n 是一个数字或 &,被视为对捕获组的引用,并且是该组中捕获的字符的占位符.这就是为什么,为了避免歧义,您应该转义 $ 字符以确保获得文字 $.