Jak to nie sprawdzisz wszystkiego?
Sam właśnie szukam rozwiązania, jak "skompresować" stringi pozbywając się nadmiarowych znaków.
jak na razie, w połtorej godziny po obudzeni się z dwu godzinego snu, wymyśliłem takiego potworka:
<?php
$sString = \"heeellloooooo all :))))))) aaaaaaa77777777 ggggggggggg;;;\";
$sPattern = '#(w)1{2,}#';
{
do
{
$sString = str_replace( $aFound[0
], $aFound[1
], $sString ); }while (preg_match($sPattern, $sString, $aFound ) ); }
?>
Który wypluwa z siebie:
Cytat
helo all

)))))) a7 g ;;;
Jak widać, nie przegryza się przez nawiasy i średniki. Trzega by pattern wyedytować, tylko, ze ja się nie znam na RegExepach jeszcze

Aha - pomijam kwestię wydajności (na razie).
=======================
Update:
<?php
/**
* @return string
* @param string $sString
* @param int $iAllowedRepeats
* @desc Kompresuje podany ciag znaków skracajac do jednego powtarzajace sie znak
, np. 'aaa' => 'a'.Ilosc znakow dozwolonych (nieskracanych) podajemy jako drugi opcjonalny parametr.
*/
function compressText( $sString, $iAllowedRepeats = 2 )
{
$sPattern = '#([w|W])1{'.$iAllowedRepeats.',}#';
{
do
{
$sString = str_replace( $aFound[0
], $aFound[1
], $sString ); }while (preg_match($sPattern, $sString, $aFound ) ); }
return $sString;
}
?>