Quantifizierer und leere Übereinstimmungen
Aktualisiert: November 2007
Die Quantifizierer *, +, {n,m } (sowie analoge "träge" Quantifizierer) starten bei fehlender Übereinstimmung keine neue Suche, wenn das Minimum n erreicht wurde. Diese Regel verhindert, dass Quantifizierer Endlosschleifen über leere Übereinstimmungen durchlaufen, wenn m unendlich ist. (Die Regel wird allerdings auch dann angewendet, wenn m endlich ist.)
Beispielsweise wird durch den Ausdruck "(a?)*" eine Übereinstimmung mit der Zeichenfolge "aaa" festgestellt und die Teilzeichenfolge mit dem Muster "(a)(a)(a)()" erfasst. Beachten Sie, dass eine fünfte leere Übereinstimmung fehlt, da der Quantifizierer nach der vierten leeren Übereinstimmung die Wiederholung beendet.
Ebenso gibt es eine Übereinstimmung von (a\1|(?(1)\1)){0,2} mit der leeren Zeichenfolge, aber nicht mit "a", da der Ausdruck nicht die Erweiterung ()(a) prüft. Der Quantifizierer {0,2} erlaubt in der letzten Iteration als Ergebnis nur eine leere Übereinstimmung. Im Gegensatz dazu führt (a\1|(?(1)\1)){2} zum Ergebnis "a". Das Muster ()(a) wird angewendet. Das angegebene Minimum von zwei Iterationen erzwingt eine Wiederholung nach einem leeren Suchergebnis.