15

隣同士にある重複した文字を削除しようとしています

1,2,3,4,5 - いくつかのカンマがありますが、それらは削除されません 1,,2,,3,,4,,5 - 通常の 1,2,3,4 に変換する必要があります,5 各数字の間にいくつのコンマがあっても、1つだけにしたい. 文字列の最後にコンマがないことを確認する同様のものがあります:

$n = "1,2,3,4,5";
for ($i=0;$i< strlen($n);$i++) {

    if (substr($n, -1) == ',') {
        $n = substr($n, 0, -1);
    }
}

この件について何か助けていただければ幸いです。

ありがとう :)

4

2 に答える 2

40

コンマのみでこれを行いたいように見えるので、preg_replaceで行うのは非常に簡単です:

$n = '1,2,,3,,,,,4,5';
$n = preg_replace('/,+/', ',', $n);     // $n == '1,2,3,4,5'

また、文字列の末尾にコンマがないことを確認する上記のコードをrtrimに置き換えることもできます。より速く、読みやすくなります。

$n = '1,2,3,4,5,,,,,'
rtrim($n, ',');                         // $n == '1,2,3,4,5'

両方を 1 つのライナーに組み合わせることができます。

$n = preg_replace('/,+/', ',', rtrim($n, ','));
于 2012-04-26T22:42:28.660 に答える
16
$n = '1,2,,3,,,,,4,5';
$n = preg_replace('/(.)\\1+/', '$1', $n);

これは、互いに直後に続く重複文字に対して機能するはずです。

ただし、質問者がこの方法で文字の繰り返しを置き換えたいとは考えにくい(44 => 4 のような数字を含む)。おそらく、次のようなことが意図されています。

$n = preg_replace('/([,.;])\\1+/', '$1', $n); # replace repetitions of ,.:
$n = preg_replace('/([^\d])\\1+/', '$1', $n); # replace repetitions of non-digit characters
于 2012-04-26T22:48:47.200 に答える