2009-04-29 28 views
4

Ich muss jeden Buchstaben, der zweimal oder öfter in einem Wort vorkommt, mit einem einzelnen Buchstaben umwandeln.Wie ersetzt man doppelte/mehrere Buchstaben zu einem einzigen Buchstaben?

Zum Beispiel:

School -> Schol 
Google -> Gogle 
Gooooogle -> Gogle 
VooDoo -> Vodo 

habe ich versucht, die folgenden, aber am zweiten Parameter in eregi_replace stecken.

$word = 'Goooogle'; 
$word2 = eregi_replace("([a-z]{2,})", "?", $word); 

Wenn ich \\\1 verwenden ersetzen?, Würde es die genaue Übereinstimmung angezeigt werden soll. Wie mache ich einen einzelnen Brief?

Kann jemand helfen? Danke

Antwort

8

Siehe regular expression to replace two (or more) consecutive characters by only one?

Durch die Art und Weise: Sie können die preg_* (PCRE) Funktionen anstelle der veralteten ereg_* Funktionen (POSIX) verwendet werden soll.

Richard Szalay ‚s Antwort führt den richtigen Weg:

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

Alter, das ist genial. Ich schätze ich muss auf PCRE umstellen! Vielen Dank! –

+0

'\ w' passt mehr als nur Buchstaben. Es entspricht '[a-zA-Z0-9_]'. – Will

2

Nicht nur erfassen Sie die gesamte Sache (anstatt nur das erste Zeichen), aber {2,} Rückübereinstimmung [a-z] (nicht die ursprüngliche Übereinstimmung). Es sollte funktionieren, wenn Sie Folgendes verwenden:

$word2 = eregi_replace("(\w)\1+", "\\1", $word); 

Welche Rückverweise die ursprüngliche Übereinstimmung. Sie können \ w durch [a-z] ersetzen, wenn Sie möchten.

Das + ist für Ihr Goooogle-Beispiel erforderlich (für die JS-Regex-Engine sowieso), aber ich bin mir nicht sicher warum.

Denken Sie daran, dass Sie das Flag "global" ("g") verwenden müssen.

1

Try this:

$string = "thhhhiiiissssss hasss sooo mannnny letterss"; 
$string = preg_replace('/([a-zA-Z])\1+/', '$1', $string); 

Wie das funktioniert:

/ .../ # Marks the start and end of the expression. 
([a-zA-Z]) # Match any single a-z character lowercase or uppercase. 
\1+  # One or more occurrence of the single character we matched previously. 

$1   
\1+  # The same single character we matched previously. 
Verwandte Themen