Mailinglisten-Archive |
> René Thiel wrote: >> Hat da jemand einen Vorschlag? Hier mal ein Lösungsansatz, nicht sonderlich flexibel aber für den Anfang tut er was er soll. Mit dem kannst Du ja weiterarbeiten. Falls Du Fragen hast: Nur her damit! :-) <?php /** * @var constant * @desc maximale Anzahl erlaubter Wiederholungen einer Zeichenfolge */ define('ALLOWED_REPETITIONS', 3); /** * @access access * @return string * @param array $repetition * @desc Reduziert Wiederholungen von Zeichenfolgen auf die erlaubte Anzahl */ function reduceRepetitions($repetition) { $chunk = guessChunk($repetition[1]); $replace = NULL; for($i = 1; $i <= ALLOWED_REPETITIONS; $i++) { $replace .= '\\1'; } if(!is_bool($chunk)) { $chunk = preg_quote($chunk, '|'); $returnValue = preg_replace('|('.$chunk.'){'.ALLOWED_REPETITIONS.',}|', $replace, $repetition); } else { $returnValue = $repetition; } return $returnValue[1]; } /** * @return string * @param string $repetition * @desc versucht die sich wiederholende Zeichenfolge zu erkennen */ function guessChunk($repetition) { $chunk = FALSE; while(!$chunk) { $pos ? $pos = 1 : $pos++; $pos > strlen($repetition) ? $chunk = TRUE : $chunk = FALSE; $char = substr($repetition, 0, 1); $guessedChunk = substr($repetition, 0, strpos($repetition, $char, $pos)); $test = str_replace($guessedChunk, NULL, $repetition); $test == NULL ? $chunk = $guessedChunk : $chunk = FALSE; } return $chunk; } /* Teststring mit Wiederholungen */ $string = ':):):):) :(:(:(:( lala doremidoremidoremidoremi'; /* Wiederholungen erkennen und ggfs. reduzieren */ $string = preg_replace_callback('|([^ ]+)+|', 'reduceRepetitions', $string); die($string); ?> Gruss, Andreas -- http://www.andreas-demmer.de
php::bar PHP Wiki - Listenarchive