Resource icon

Rekursiver Regexp für mathematische Ausdrücke (PCRE)

Programmiersprache(n)
Perl kompatibler regulärer Ausdruck
Mir war langweilig und daher habe ich mal ein bisschen rumprobiert wie weit man mit rekursiven Ausdrücken eigl. gehen kann ... und naja, sehr weit wie es scheint.

Und bevor ich den Code dazu jetzt lösche, dachte ich, ich poste diesen einfach hier mal.
Vielleicht findet es ja jemand interessant.

Mit folgendem Snippet kann man Ausdrücke und Funktionsaufrufe testen:
Code:
^(\h*[+-]?\h*(?:(([a-zA-Z_]\w*)|((?:\d+(?:\.\d*)?|\.\d+)|(?3)))|\((?1)\))(?:\h*(?:[+*\/-](?1)|\((?:(?1)(?:,(?1))*|\h*)*\)\h*)*\h*))$
Beispiele die auf diesen Ausdruck passen:
Code:
1+1
1+(-2*(3/(-4+5)))
foo(bar(42)) + e
2*PI
https://regex101.com/r/8nKEpV/3

Da das aber langweilig ist, dachte ich mir, wie wärs mit Strings, Eigenschaften und Methodenaufrufen?
Tja, das geht auch...
Code:
^(\h*[+-]?\h*(?:(([a-zA-Z_]\w*)|((?:\d+(?:\.\d*)?|\.\d+)|"(?:[^\\"]+|\\.)*"|'(?:[^\\']+|\\.)*'|(?3)))|\((?1)\))(?:\h*(?:[+*\/-](?1)|(?:\.(?3)(?:\h*\((?:(?1)(?:,(?1))*|\h*)?\))?)|\((?:(?1)(?:,(?1))*|\h*)*\)\h*)*\h*))$
Beispiele die auf diesen Ausdruck passen (zzgl. denen von oben):
Code:
(1+1).foo
"hello"+foo().bar.baz()+'x'
https://regex101.com/r/5NgX8x/1

Es ist schon Interessant was man damit so alles anstellen kann.
Autor
asc
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen

More resources from asc

Oben