2011-07-17 72 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);