2013-08-02 75 views
1

我需要在相同的三行中排列多個相同的字母(只有A-Z或a-z,而不是數字)。任何人都可以幫我一個模式字符串?替換多個相同的字母

實施例:

輸入:NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

輸出:NO MEK PUCES CUDAK AVVV VASMAAA

+0

您需要替換除3個字母以外的所有字母嗎? – AmazingDreams

+0

[Regex刪除重複的字母]的可能的重複(http://stackoverflow.com/questions/17885329/regex-to-remove-duplicate-letters) – NDM

回答

6

使用組(([A-Za-z]))和反向引用(\1)。

$text = "NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";  
echo preg_replace('/([A-Za-z])\1{3,}/', "$1$1$1", $text); 
# => NO MEK PUCES CUDAK AVVV VASMAAA 
+0

謝謝你,你是老闆。 – Legionar

2

可以使用正則表達式與反向引用:

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

(.)匹配任何字符並將其放入捕獲組中。 \1是對同一組的引用,並且+限定了它可能出現一次或多次的前一個標記。因此,這會將至少兩個相同字符的任何運行替換爲一個。

如果你想要一個以上的字符保留,比如你的例子表明,你可以使用以下命令:

preg_replace('/(.)\1{2,}/', '$1$1$1', $str); 

如果需要限制的字符集,那麼就由字符類換出. ,例如[a-zA-Z]

+1

這我知道,但它不正確。這將取代一切,只有一個。我只需要A-Z,a-z,並用三個相同的字母替換。 – Legionar

+0

是的,現在正確,也需要(。)改變爲([A-Za-z]) – Legionar

+1

這就是我在最後一句中寫的,是的。 – Joey