Wir alle wissen, dass Sie Ihre häufig verwendeten regulären Ausdrücke in etwas kombinieren können, das sehr gut funktioniert. Aber was ist diese Hexerei hinter den Vorhängen?
Ich nehme an, dass ein endlicher Automat dort gebaut wird, aber Sie müssen es besser wissen als ich.
Die Details der Kompilierung von regulären Ausdrücken variieren je nach Implementierung. Zum Beispiel die Kompilierung in Python oder re2 erstellt einfach eine Instanz eines regulären Ausdrucksobjekts. Die Zustandsmaschine dieses Objekts kann als Graph oder virtuelle Maschine modelliert werden. Ohne Kompilierung (Beispiel: RE.match(expression, input)
) wird jedes Mal, wenn match
aufgerufen wird, ein neues Objekt für den regulären Ausdruck hinter den Kulissen erstellt. Dies ist überflüssig, wenn Sie einen Ausdruck mehr als einmal verwenden möchten.
In C # kann eines von drei Dinge passieren, wenn Sie kompilieren >:
Sie erwähnen ein Interesse an Algorithmen. Werfen Sie einen Blick auf die ausgezeichneten Artikel von Russ Cox für zwei Ansätze:
Das Kompilieren eines regulären Ausdrucks ähnelt dem Kompilieren von Java- oder Python-Code. Der reguläre Ausdruck wird in eine Zwischendarstellung umgewandelt, die dann von der RE-Engine interpretiert wird, um die entsprechenden Operationen für eine Zeichenfolge auszuführen.
Tags und Links language-agnostic regex