删除重复的字符

时间:2011-07-17 10:56:05

标签: php regex

如何删除重复字符(例如删除k中的字母cakkkke,使其为cake)?

执行此操作的一种简单方法是循环遍历字符串的每个字符,如果字符不是前一个字符的重复,则将字符串的每个字符附加到新字符串。

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

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

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

3 个答案:

答案 0 :(得分:36)

使用backrefrences

echo preg_replace("/(.)\\1+/", "$1", "cakkke");

输出:

cake

说明:

(.)捕获任何角色

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

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

$1中使用kkk替换完整匹配的文本k,在这种情况下使用第一个捕获组{{1}}替换。

答案 1 :(得分:1)

您希望首先匹配一个字符,然后重复该字符:(.)\1+。用第一个字符替换它。 brackets创建对第一个字符的反向引用,您可以使用它来匹配重复的实例和替换文本。

preg_replace('/(.)\1+/', '$1', $str);

答案 2 :(得分:0)

使用此正则表达式"(.)\\1+"并替换为$1

真的不知道php,但在C#中:

Console.WriteLine(Regex.Replace("cakkkkeee", "(.)\\1+", "$1"));