Was defintiv noch fehlt sind Klammernausdrücke.
Klammerung ist nur eine Frage der Syntax. Ob ich die Baumstruktur eines regulären Ausdrucks nun aufmale oder linearisiert mit Hilfe von Klammern notiere ist für die Struktur unerheblich.
Zeichenklassen, andere Quantifier, look-arounds, "Backreferences" (Diese \1 für die erste Klammerung), etc
Zeichenklassen lassen sich auf Alternativen zurückführen, z.B.:
Code:
[aeiou] ? (a|e|i|o|u)
\d ? (0|1|2|3|4|5|6|7|8|9)
Beliebige Quantifier lassen sich ebenso mit den Basiskonstrukten ausdrücken, z.B.:
Code:
x? ? (|x)
x+ ? xx*
x{3,} ? xxxx*
x{2,4} ? (xx|xxx|xxxx)
Bei Lookarounds gibt es kein so klares Muster, aber auch diese ließen sich zurückführen (wenn es wie hier nur darum geht, ob ein regulärer Ausdruck eine Zeichenkette im ganzen erfasst oder nicht).
Erlaubt man Rückwärtsreferenzen, ist der Ausdruck nach Definition kein regulärer Ausdruck mehr, da damit mehr als nur reguläre Sprachen erkannt werden können. Insofern kann man diese natürlich auch nicht auf die Basiskonstrukte regulärer Ausdrücke zurückführen.
Grüße,
Matthias