Quantifizierer und leere Übereinstimmungen
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.