關於刪除前導和尾隨0有很多問題,但是我找不到除尾部0(除0之外的其他任何地方除外結束)。從字符串中刪除除尾0之外的所有0
100010 -> 110
010200 -> 1200
01110 -> 1110
有什麼建議嗎?
關於刪除前導和尾隨0有很多問題,但是我找不到除尾部0(除0之外的其他任何地方除外結束)。從字符串中刪除除尾0之外的所有0
100010 -> 110
010200 -> 1200
01110 -> 1110
有什麼建議嗎?
嘗試
echo preg_replace('/0+([1-9])/', '$1', $str);
不是最漂亮的,但它的工作原理...
$str = "01110";
if(substr($str,-1) == 0){
$str = str_replace("0","",$str)."0";
}else{
$str = str_replace("0","",$str);
}
echo $str; // gives '1110'
啊這隻適用於如果它是一個尾隨零。 Woops。 – Chris
您可以使用正則表達式[0]+(?=[1-9])
找到零(使用正向前查找)和preg_replace
用一個空字符串替換它們(假設的數量已經是以字符串形式)。
$result = preg_replace("#[0]+(?=[1-9])#", "", "100010");
看到它在行動here
您可以使用正則表達式做你想要什麼:
if(preg_match('/^(0*)(.*?)(0*)$/',$string,$match)) {
$string = $match[1] . str_replace('0','',$match[2]) . $match[3];
}
要替換是不是所有的零在字符串的末尾。
你可以做到這一點與所謂的負先行有點正則表達式,所以只有零匹配更換是不是在字符串的結尾:
$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+)(?!$)
您可以使用正則表達式爲其他人則建議,或修剪。計算結尾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];
您可以使用regexp來做到這一點。 – Aziz
轉換爲整數然後返回字符串? – bendataclear
@bendataclear不,他想在中間刪除0。 – emartel