先頭と末尾の 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+
1 つ以上のゼロを意味します。つまり、2 つある場合は、1 つではなく 2 つ必要です。最後に交換しないことが重要です。しかし、置き換えられるものに 0 が続くことは許可されていないことも書く必要があります。
あなたが文を定式化したように:
末尾の 0 を除くすべての 0 を削除する方法 (先頭の 0 または末尾以外の場所)。
つまり: 0+(?!$|0)
. http://www.regular-expressions.info/lookaround.html -デモを参照してください。
もう 1 つのバリアントは、atomic groupingを使用したもので、これはもう少し単純なはずです ( Demo ):
(?>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'