关于删除前导和尾随0有很多问题,但是除了尾随0(前导0或除了结尾之外的任何其他位置)之外我找不到删除所有0的方法。
100010 -> 110
010200 -> 1200
01110 -> 1110
有什么建议吗?
答案 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'