如何删除重复字符(例如删除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;
有没有办法使用正则表达式或内置函数更简洁地做同样的事情?
答案 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"));