RegEx 只保留字符串的最后一个点

RegEx to keep only the last dot from a string

如何使用 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\.] 之外,我还应该做什么才能实现这一目标?

您可以使用此正则表达式匹配除最后一个点以外的所有点并将其替换为空字符串,

\.(?=.*\.)

此处 \. 仅当它使用正向前看在字符串中看到一个点时才匹配一个点 (?=.*\.)

Regex Demo

PHP Code demo

$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+|$)

Regex Demo handling dot at the end of number