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+1 つ以上のゼロを意味します。つまり、2 つある場合は、1 つではなく 2 つ必要です。最後に交換しないことが重要です。しかし、置き換えられるものに 0 が続くことは許可されていないことも書く必要があります。

あなたが文を定式化したように:

末尾の 0 を除くすべての 0 を削除する方法 (先頭の 0 または末尾以外の場所)。

つまり: 0+(?!$|0). http://www.regular-expressions.info/lookaround.html -デモを参照してください。

もう 1 つのバリアントは、atomic groupingを使用したもので、これはもう少し単純なはずです ( Demo ):

(?>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 に答える