2011-07-17 10 views
15

繰り返し文字を削除するにはどうすればよいですか?手紙kcakkkkeは正規表現ですか?繰り返し文字を削除する

+2

「look、free、tree'のような言葉に何を期待しますか? –

+0

@Lawrence Cherone:キャラクターがn回以上出現した場合にのみ交換したいと思っています。私は通常、n値を4以上に設定します。 –

+0

その後、 'cakkkke'は –

答えて

33

使用backrefrences

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

出力:

cake 

説明:

(.)キャプチャ任意の文字

\\1は、最初のキャプチャグループの後方参照です。この場合、上記の.

+は、少なくとも1

$1でそれを置き換える(A、AAAA、AAA、それはAAと一致するように、ではないが)最初のキャプチャグループとこの場合は完全なマッチしたテキスト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); 
関連する問題