2013-06-02 28 views
4

我是新來的,想知道如何在php中使用正則表達式。 如果我有文字"haha" "abcabcabc" "hehehe" "cupcupcupcup"(含有重複的音節詞)。PHP - 刪除重複的音節詞

如何刪除該文本?

(比如$text="cupcupcup";」,如何使這個像$text="";)如果有同樣的要求(我有搜索,但無法找到,描述了我的問題頁面)

感謝您的欣賞

遺憾: )

+2

如果字符串是'hahaabcabcabc'會怎麼樣? – Jerry

+0

(含有重複的音節詞)。如何刪除該文本?也許在你的文本中不會包含任何東西 – user2413763

+0

你的意思是說,如果你有'$ text =「cupcupcup」;',你應該得到'$ text =「」;'? – Jerry

回答

4

嘗試

$txt = preg_replace("/^(.*)(\\1+)$/", "", $txt); 

該搜索字符串的開始序列,然後匹配至少一個REPE然後匹配字符串的末尾。

例如

$txt = preg_replace("/^(.*)(\\1+)$/", "", "cupcupcup"); //=> "" 
$txt = preg_replace("/^(.*)(\\1+)$/", "", "cucupcup"); //=> "cucupcup" 
+0

'。*'本身將匹配整個字符串... – HamZa

+0

@HamZa它不應該是因爲下一個子模式在字符串結束之前至少需要一次(由於+量詞)。 – Graham

+0

好的+1,我明白了! – HamZa

2

嗯,我想這會做

\b(?=\w*[aeiou]\w*)(\w*)\1+ 
    ------------- 
      | 
      |->check if its a syllable word 

""

+0

沒錯,我沒有把音節詞作爲要求,很好。 – Graham

+0

@Graham提煉你的正則表達式.. :) – Anirudha

0

所以這裏取代它就是我想出了:

([b-df-hj-np-tv-xz][aeiouy](?:[a-z])?|[aeiouy][b-df-hj-np-tv-xz](?:[a-z])?)(\1){2,} 

Online demo

說明:

  • [b-df-hj-np-tv-xz]:匹配輔音。
  • [aeiouy]:匹配元音。
  • [a-z]:匹配一個字母。
  • ([b-df-hj-np-tv-xz][aeiouy](?:[a-z])?:匹配輔音後跟一個元音,後面可以跟一個字母。
  • |[aeiouy][b-df-hj-np-tv-xz](?:[a-z])?):或匹配一個元音後跟一個輔音,然後可以選擇一個字母。
  • (\1){2,}:重複組1兩次或更多次。
0

如果文字,如:

$txt = preg_replace("/(.*)(\\1+)/", "", "the text is cupcupcup and cupcupcupa"); 

,將刪除cupcupcupcupcupcupa。如何刪除cupcupcup

+0

@Graham你能解決這個問題嗎? –