删除重复的字符

Imr*_*hsh 21 php regex

我将如何删除重复的字符(例如,删除信件kcakkkke为它是cake)?

一种直接的方法是循环遍历字符串的每个字符,如果字符不是前一个字符的重复,则将字符串的每个字符附加到新字符串.

以下是一些可以执行此操作的代码:

$newString = '';
$oldString = 'cakkkke';
$lastCharacter = '';
for ($i = 0; $i < strlen($oldString); $i++) {
    if ($oldString[$i] !== $lastCharacter) {
        $newString .= $oldString[$i];
    }
    $lastCharacter = $oldString[$i];
}
echo $newString;
Run Code Online (Sandbox Code Playgroud)

有没有办法使用正则表达式或内置函数更简洁地做同样的事情?

Dog*_*ert 38

使用backrefrences

echo preg_replace("/(.)\\1+/", "$1", "cakkke");
Run Code Online (Sandbox Code Playgroud)

输出:

cake
Run Code Online (Sandbox Code Playgroud)

说明:

(.) 捕获任何角色

\\1是对第一个捕获组的反向引用.在.这种情况下的上方.

+ 使反向引用匹配至少为1(这样它匹配aa,aaa,aaaa,但不匹配a)

在这种情况下,使用第一个捕获组$1替换完全匹配的文本kkk,替换它k.

  • 将`+`替换为`{n,}`. (4认同)