15

我试图删除直接相邻的重复字符

1,2,3,4,5 - 有几个逗号,但它们不会被删除 1,,2,,3,,4,,5 - 必须变成常规的 1,2,3,4 ,5 无论每个数字之间有多少个逗号,我都希望只有一个。我有类似的东西可以确保字符串末尾没有逗号:

$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'

您可以将它们组合成一个单行:

$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 回答