| |
| * Link führt ins Internet |
|
| |
Reguläre Ausdrücke sind nicht nur in der Programmierung komplex. Auch die Umsetzung und Auswertung stellt für den PHP-Interpreter eine Herausforderung dar. Die Ausdrücke werden zwar kompiliert und dann erheblich schneller ausgeführt, komplexe Konstrukte mit langen Zeichenketten können dennoch spürbar Zeit in Anspruch nehmen und dies auch auf schnellen Rechnern. Eine Webanwendung ist kaum praktikabel, wenn ein regulärer Ausdruck alleine eine Sekunde zur Bearbeitung benötigt.
Einige Konstrukte benötigen aufgrund der internen Verarbeitung erheblich mehr oder weniger Zeit als andere. Die folgende Auflistung zeigt die wesentlichsten Unterschiede. Da sich oft mehrere Wege nach Rom finden lassen - sprich zum Ziel, existieren fast immer Alternativen, die Leitung eines Ausdrucks ohne Funktionseinbussen zu erhöhen.
. Es ist wesentlich effizienter eine Zeichenklassendefinition wie [abcd] zu nutzen, als eine Serie von Alternativen (a|b|c|d).
. Wenn die Option PCRE_DOTALL nicht erwünscht ist, kann alternativ ^.* gesetzt werden.
. Wenn eine Ausdruck mit .* beginnt und die Option PCRE_DOTALL gesetzt wurde, erkennt PHP, dass die Zeichenkette nur am Anfang stehen kann, und verankert sie implizit. Ist PCRE_DOTALL nicht gesetzt, kann diese Optimierung nicht aufgeführt werden.
. Generell hilft es dem Interpreter, wenn die Beschreibung so direkt wie möglicht erfolgt, implizite Annahmen werden oft erst erkannt, wenn der gesamt Ausdruck verarbeitet und ausgewertet wurde.
. Wenn Sie mehrere Varianten eines Ausdrucks haben und diesen in einer häufig durchlaufenen Schleife anordnen müssen, testen Sie die Abarbeitungszeit der Varianten und wählen Sie die Schnellste.
. Ausdrücke werden nicht weiter ausgewertet, wenn das Ergebnis feststeht. Bei der Abarbeitung sollte der wahrscheinlichste Fall also am weitesten links stehen.
|
|
|
|
|
|
|