2015-05-26 21 views
2

如果有多於三個的字符,我想替換每個WORD中的所有連續字符(三種是德語中最可能的,兩種是英語,因此我知道輸出示例在語法上是錯誤的) 。PHP替換句子中連續出現的字符

示例輸入:

Hellooooo Louis, whaaaaaat's up pal? 

預期輸出:

Hellooo Louis, whaaat's up pal? 

我試圖改變:

preg_replace('/(\w)\1+/', '$1', $word); 

preg_replace('/(\w)\3+/', '$1', $word); 

但是,它不輸出任何內容。

+2

http://en.wikipedia.org/wiki/List_of_words_in_English_with_tripled_letters – foxbeefly

+0

@foxbeefly:哈,不知道他們有3個英文也是如此:-) –

回答

5

您可以使用以下正則表達式:

((\w)\2{2})\2+ 

demo

替換$1

IDEONE

$re = "#((\w)\\2{2})\\2+#"; 
$str = "Hellooooo Louis, whaaaaaat's up pal?"; 
$subst = "$1"; 
$result = preg_replace($re, $subst, $str); 
echo $result; 

輸出:

Hellooo Louis, whaaat's up pal? 

說明:

我們捕捉(\w)象徵 - 它是第2組值。然後,我們檢查它是否跟着相同的字符\2{2}正好2次,然後我們將它捕獲到組1.然後,我們將任何更多相同的後續字符與\2反向引用進行匹配。

+0

謝謝你完美的工作。我會在幾分鐘內接受答案! –

2

這裏有很長的路要走:

preg_replace('/((\w)\2\2)\2+/', '$1', $word); 
1

您也可以使用\K爲後復位,並用空的,這是一個比較有效的替換:

(\w)\1\1\K\1+ 

regex101

相關問題