如何使用preg_replace()仅保留最后一个点并从字符串中删除所有其他点。
示例字符串:
1.000.000.00
预期结果:
1000000.00
我的代码:
$pattern = '/[^0-9\.]/';
$amount = '1.000.000.00';
echo preg_replace($pattern, "", $amount);
我该如何解决这个问题?
编辑: 除了删除数字中的最后一个点并从字符串中删除任何不是数字或点字符的字符外,如果像这样在数字末尾也存在点,我还需要删除点,
1.000.000.00. after replacement should become 1.000.000.00
除了当前的正则表达式[^0-9\.]
之外,我还应该做什么?
答案 0 :(得分:1)
您可以使用此正则表达式来匹配除最后一个点以外的所有点,并用空字符串替换
\.(?=.*\.)
这里\.
仅在使用正向向前(?=.*\.)
的字符串中看到一个点时才匹配一个点。
$s = '1.000.000.00';
echo preg_replace('/\.(?=.*\.)/', '', $s);
打印
1000000.00
编辑1:
也需要与此同时使用OP的当前正则表达式,因为OP似乎还将用数字代替所有不是数字或点的其他东西。您可以使用的组合正则表达式就是这个,它也会删除所有非数字和点(除非它不是最后一个点),
[^0-9.]+|\.(?=.*\.)
Regex Demo for combined regex with OP's regex
编辑2:
另外,对于类似下面这样的情况,也应删除数字结尾处不需要的点,例如1.000.000.
,但应保留数字中的最后一个点。
正则表达式也需要进行修改,以处理这种情况,
[^0-9.]+|\.(?=\d+\.\d+|$)