0

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

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

有什么建议么 ?

4

8 回答 8

5

尝试

echo preg_replace('/0+([1-9])/', '$1', $str);
于 2012-11-14T15:48:55.787 回答
2

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

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

在此处查看实际操作

于 2012-11-14T15:48:52.807 回答
1

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

您可以使用带有所谓的负前瞻的一些正则表达式来做到这一点,因此只有不在字符串末尾的零匹配被替换:

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

$表示字符串的结束。0+表示一个或多个零。那就是贪心,意思是,如果有两个,就需要两个,而不是一个。这很重要,不要在最后更换。但还需要写的是,被替换的内容不允许跟随 0。

就像你制定了你的句子:

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

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

另一种变体是原子分组,它应该更直接一点(演示):

(?>0+)(?!$)
于 2012-11-14T15:50:34.093 回答
0

你可以使用正则表达式来做你想做的事:

if(preg_match('/^(0*)(.*?)(0*)$/',$string,$match)) {
    $string = $match[1] . str_replace('0','',$match[2]) . $match[3];
}
于 2012-11-14T15:48:57.980 回答
0

您可以按照其他人的建议使用正则表达式,或者修剪。计算尾随的 0,去掉所有的 0,然后将尾随的 0 添加回去。

$num = 10100;
$trailing_cnt = strlen($num)-strlen(trim($num, "0"));
$num = str_replace('0','',$num).str_repeat('0', $trailing_cnt);
于 2012-11-14T15:51:49.173 回答
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;
于 2012-11-14T15:52:31.457 回答
0

这是一个解决方案。应该有更漂亮的,但这也有效。

$subject = "010200";
$match = array();
preg_match("/0*$/",$subject,$match);
echo preg_replace("/0*/","",$subject).$match[0];
于 2012-11-14T15:55:36.047 回答
-1

不是最漂亮的,但它的工作...

$str = "01110";

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

echo $str; // gives '1110'
于 2012-11-14T15:48:19.637 回答