关于删除前导和尾随 0 有很多问题,但我找不到删除所有 0 的方法,除了尾随 0(前导 0 或除末尾以外的任何其他位置)。
100010 -> 110
010200 -> 1200
01110 -> 1110
有什么建议么 ?
尝试
echo preg_replace('/0+([1-9])/', '$1', $str);
您可以使用正则表达式[0]+(?=[1-9])
查找零(使用正向前瞻)并preg_replace
用空字符串替换它们(假设数字已经是字符串形式)。
$result = preg_replace("#[0]+(?=[1-9])#", "", "100010");
在此处查看实际操作
您想要替换不在字符串末尾的所有零。
您可以使用带有所谓的负前瞻的一些正则表达式来做到这一点,因此只有不在字符串末尾的零匹配被替换:
$actual = preg_replace('/0+(?!$|0)/', '', $subject);
$
表示字符串的结束。0+
表示一个或多个零。那就是贪心,意思是,如果有两个,就需要两个,而不是一个。这很重要,不要在最后更换。但还需要写的是,被替换的内容不允许跟随 0。
就像你制定了你的句子:
一种删除除尾随 0 之外的所有 0 的方法(前导 0 或除结尾以外的任何其他位置)。
即:0+(?!$|0)
。请参阅http://www.regular-expressions.info/lookaround.html -演示。
(?>0+)(?!$)
你可以使用正则表达式来做你想做的事:
if(preg_match('/^(0*)(.*?)(0*)$/',$string,$match)) {
$string = $match[1] . str_replace('0','',$match[2]) . $match[3];
}
您可以按照其他人的建议使用正则表达式,或者修剪。计算尾随的 0,去掉所有的 0,然后将尾随的 0 添加回去。
$num = 10100;
$trailing_cnt = strlen($num)-strlen(trim($num, "0"));
$num = str_replace('0','',$num).str_repeat('0', $trailing_cnt);
// 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;
这是一个解决方案。应该有更漂亮的,但这也有效。
$subject = "010200";
$match = array();
preg_match("/0*$/",$subject,$match);
echo preg_replace("/0*/","",$subject).$match[0];
不是最漂亮的,但它的工作...
$str = "01110";
if(substr($str,-1) == 0){
$str = str_replace("0","",$str)."0";
}else{
$str = str_replace("0","",$str);
}
echo $str; // gives '1110'