2011-07-17 59 views
15

如何删除重复字符字母kcakkkke因为它是cake使用正则表达式?删除重复字符

+2

对于像'look,free,tree'这样的单词,你会期待什么? –

+0

@劳伦斯Cherone:我希望它只在角色出现超过n次时才会被替换。我通常会将n值设置为4或更高 –

+0

然后'cakkkke'会通过 –

回答

33

使用backrefrences

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

输出:

cake 

说明:

(.)捕获任何字符

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

+,使反向引用匹配ATLEAST 1(以便它匹配AA,AAA,AAAA,但不是)

$1更换它取代了完整匹配的文本kkk在这种情况下,第一个捕获组,在这种情况下为k

+0

很好用,你可以通过解释正则表达式来进一步帮助。我不明白它是如何工作的:斜杠? 1? +? –

+0

@Imran,检查我更新的答案。如果还有什么不清楚的地方,请随时询问。 – Dogbert

+0

更多有关反向参考的信息:http://www.explainth.at/en/re/backref.shtml – Dogbert

0

使用这个表达式"(.)\\1+"$1取代。

真的不知道PHP,但在C#:

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

这个答案与**这个**特定问题无关。虽然模式是适用的。 –

1

你想先匹配字符,后跟该字符重复:(.)\1+。将其替换为第一个字符。 brackets创建了第一个字符的反向引用,该字符用于匹配重复实例和替换文本。

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