删除除字符串尾随0之外的所有0

时间:2012-11-14 15:42:52

标签: php trailing

关于删除前导和尾随0有很多问题,但是除了尾随0(前导0或除了结尾之外的任何其他位置)之外我找不到删除所有0的方法。

100010 -> 110  
010200 -> 1200  
01110  -> 1110

有什么建议吗?

8 个答案:

答案 0 :(得分:5)

尝试

echo preg_replace('/0+([1-9])/', '$1', $str);

答案 1 :(得分:2)

您可以使用正则表达式[0]+(?=[1-9])查找零(使用正向前瞻)和preg_replace以使用空字符串替换它们(假设数字已经是字符串形式)。

$result = preg_replace("#[0]+(?=[1-9])#", "", "100010");

在行动here

中查看

答案 2 :(得分:1)

您想要替换不在字符串末尾的所有零。

你可以用一些带有所谓负面预测的正则表达式来做到这一点,所以只有被替换的零匹配不在字符串的末尾:

$actual = preg_replace('/0+(?!$|0)/', '', $subject);

$表示字符串的结尾。 0+表示一个或多个零。这是贪婪的,意思是,如果有两个,它将需要两个,而不是一个。最重要的是不要在最后更换。但是也需要写出来,即被替换的内容不允许使用0。

就像你制定了你的句子一样:

  

一种删除除0之后的所有0的方法(前导0或除结尾之外的任何其他位置)。

即:0+(?!$|0)。请参阅http://www.regular-expressions.info/lookaround.html - Demo

另一个变体是atomic grouping,它应该更直接(Demo):

(?>0+)(?!$)

答案 3 :(得分:0)

您可以使用正则表达式执行您想要的操作:

if(preg_match('/^(0*)(.*?)(0*)$/',$string,$match)) {
    $string = $match[1] . str_replace('0','',$match[2]) . $match[3];
}

答案 4 :(得分:0)

您可以像其他人建议的那样使用正则表达式,或修剪。计算尾随0,删除全0,然后添加尾随0。

$num = 10100;
$trailing_cnt = strlen($num)-strlen(trim($num, "0"));
$num = str_replace('0','',$num).str_repeat('0', $trailing_cnt);

答案 5 :(得分:0)

// original string
$string = '100010';

// remember trailing zeros, if any
$trailing_zeros = '';
if (preg_match('/(0+)$/', $string, $matches)) {
    $trailing_zeros = $matches[1];
}

// remove all zeros
$string = str_replace('0', '', $string);
// add trailing ones back, if they were found before
$string .= $trailing_zeros;

答案 6 :(得分:0)

这是一个解决方案。应该更漂亮,但也可以。

$subject = "010200";
$match = array();
preg_match("/0*$/",$subject,$match);
echo preg_replace("/0*/","",$subject).$match[0];

答案 7 :(得分:-1)

不是最漂亮但却有效......

$str = "01110";

if(substr($str,-1) == 0){
    $str = str_replace("0","",$str)."0";
}else{
    $str = str_replace("0","",$str);
}

echo $str; // gives '1110'