Andreas: Performance - Vergleich reg Expr.

Beitrag lesen

Hi!

Diese Funktion ersetzt alle Vorkommen von needle innerhalb der Zeichenkette haystack durch den String str.

Das stimmt, aber nach folgendem Schema:

Gegebener String:
  $str = "#..........#"; //10 Punkte

(wir können ja Punkte statt Leerzeichen verwenden, ist übersichtlicher)

Nach einem Durchlauf

$str = str_replace("..",".",$str); // geht bei den Regex-Ersetzungen natürlich nicht ;-)

erhalten wir:

"#.....#"; //5 Punkte

Dies kommt daher, daß str_replace() den String von vorne (oder hinten?) durchsucht und dabei jedes Vorkommen von 2 Punkten durch 1 Punkt durchsucht. Am Ende angekommen wird der String nicht noch einmal nach weiteren Vorkommen durchsucht.

Es werden dabei 5x 2 Punkte gefunden, die dann ersetzt werden, also bleiben 5 Punkte am Ende übrig.

Wenn Du mir nicht glaubst, probier es aus! ;-)

OK:
<?php
$laenge_vor=1;
$laenge_nach=0;
$string = "quatsch....quatschquatsch.............quatschquatschquatsch";

while($laenge_vor > $laenge_nach) {
    $laenge_vor = strlen ($string);
    $string = str_replace ("..",".",$string);
    $laenge_nach = strlen ($string);
}
?>

so in etwa sollte es gehen, komme aber für keine Schäden auf ;-)

?>

Anmerkung: Die Funktion preg_replace(), die eine zu Perl kompatible Syntax regulärer Ausdrücke verwendet, ist häufig die schnellere Alternative zu ereg_replace().
Wer lesen kann ist klar im Vorteil ;-)

sehe ich genau so, hätte oben mal besser lesen sollen ;-)

Bei meiner Offline-Doku steht der zweite Halbsatz nicht drinnen... vielleicht sollte ich mir mal eine neue Version runterladen... Danke! :-)

Wozu gibt es Flatrates....

Grüße
Andreas