我正在尝试从包含用于表示百分比的数值的字符串中修剪前导和尾随零。
我写了这个丑陋的代码块,它结合了rtrim(),ltrim()和preg_replace():
rtrim(ltrim(preg_replace("/'d*'.(0(?![0$])|[1-9])*'K0+$/", "", $value),"0"), ".")
但它似乎不起作用,因为如果我输入 0010.003000,输出是 10.003000 而不是所需的 10.003
有没有办法让正则表达式在 Php 中从右到左读取(从右边删除零,直到找到零或 [1-9])?或者有没有办法改进我的正则表达式以实现我的目标?
重要提示:出于某种有争议的原因,我不能做一个简单的演员来漂浮,只是享受玩电子游戏所节省的时间。
为了更好地解释我的奇怪问题,这里有一些具有预期行为的示例:01.00 => 1 ,100 => 100 ,002.0050 => 2.005 ,0.005 => .005
尝试以下操作:
/^0+|'..+?'K0+$/g
这要么匹配字符串开头^0+
处的一个或多个0
,要么匹配字符串末尾0+$
的一个或多个0
s。
在 PHP 中:
preg_replace_all("/^0+|'..+?'K0+$/", "", $value)
注意:我建议使用非正则表达式解决方案,因为它们更适合这种简单的情况。尽管如此,我还是发布了这个,因为您要求使用正则表达式。
正则表达式 101 演示
只需将字符串转换为float
:
$s = '0010.003000';
echo (float) $s;
//=> 10.003
您可以使用 floatval 代替正则表达式:
<?php
$str = "0010.003000";
print floatval($str);
输出:10.003
你会对这样的正则表达式说些什么?
echo preg_replace("/((^0+)|(0+$))/", ", $value);
好的,现在我明白了问题;)试试这个:
echo preg_replace("/^0*([1-9][0-9]*('.[0-9]*[1-9]))?0*$/", "$1", $value);
为了回答您的奇怪问题,我添加了对返回0
0.000
的支持:
$nbr = preg_replace('/^(0)+'.?0*$|^0+|'.0*$|'.'d+?'K0+$/', '$1', $nbr);