删除彼此相邻的重复字符

Ste*_*eve 14 php string

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

会对这件事有所帮助,

谢谢 :)

Pau*_*aul 35

看起来你只想用逗号做这个,所以使用preg_replace非常容易:

$n = '1,2,,3,,,,,4,5';
$n = preg_replace('/,+/', ',', $n);     // $n == '1,2,3,4,5'
Run Code Online (Sandbox Code Playgroud)

您还可以替换上面给出的代码,以确保在使用rtrim的字符串末尾没有逗号.它会更快更容易阅读:

$n = '1,2,3,4,5,,,,,'
rtrim($n, ',');                         // $n == '1,2,3,4,5'
Run Code Online (Sandbox Code Playgroud)

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

$n = preg_replace('/,+/', ',', rtrim($n, ','));
Run Code Online (Sandbox Code Playgroud)


Irf*_*rfy 13

$n = '1,2,,3,,,,,4,5';
$n = preg_replace('/(.)\\1+/', '$1', $n);
Run Code Online (Sandbox Code Playgroud)

应该适用于紧随其后的任何重复字符.

但是,提问者不太可能以这种方式替换任何字符重复(包括44 => 4之类的数字).更有可能的是,这样的意图是:

$n = preg_replace('/([,.;])\\1+/', '$1', $n); # replace repetitions of ,.:
$n = preg_replace('/([^\d])\\1+/', '$1', $n); # replace repetitions of non-digit characters
Run Code Online (Sandbox Code Playgroud)

  • 虽然这可能不是他想要的,但这是他在他的问题中要求的,所以+1. (3认同)