Preg_replace
在替换选项中给出($ 1,500)等货币字符串时会产生不正确的结果。
这是我的代码
<?php
$amount = '$1,500.00';
echo $amount. "<br />";
echo preg_replace('/{amount_val}/', $amount, '{amount_val}'); // it gives ",500" but i need "$1,500"
?>
我尝试使用preg_quote
,请查看以下代码段
<?php
$amount = '$1,500.00';
$amount = preg_quote('$1,500.00');
echo $amount. "<br />";
echo preg_replace('/{amount_val}/', $amount, '{amount_val}'); // it gives "$1,500\.00" but i need "$1,500"
?>
我怎样才能得到确切的结果,即 $ 1,500.00
请帮我解决这个问题。
提前致谢
答案 0 :(得分:1)
只需逃离美元符号,请参阅a demo on ideone.com:
<?php
$amount = '\$1,500.00';
echo preg_replace('~{amount_val}~', $amount, '{amount_val}');
// output: $1,500
?>
或者(这是 真的 你在追求什么?)
<?php
$amount = '$1,500.00';
echo preg_replace('~{amount_val}~', str_replace('$', '\$', $amount), '{amount_val}');
?>
答案 1 :(得分:1)
由于您要替换文字字符串,因此不需要使用正则表达式:
$amount = '$1,500.00';
$result = str_replace('{amount_val}', $amount, $yourstring);
现在为什么你用preg_replace
得到一个奇怪的结果?
在替换字符串中,每个序列$n
(其中n是数字或&
)被视为对捕获组的引用,并且是该组中捕获的角色的占位符。这就是为什么,为了避免含糊不清,你应该逃避$
字符,以确保获得文字$
。