So etwas wie:
Ссылка
Mit anderen Worten möchte ich erfolgreich auf { { foo } { bar} }
, aber nicht auf { { foo }
.
Ich sehe es in Perl, und in .NET . Ist es in Emacs Regex möglich?
Nein, bis jetzt sind Perl / PCRE und .NET die einzigen Regex-Varianten, die beliebige Verschachtelung (rekursive Muster) unterstützen.
Nein, aber wenn Sie einen bestimmten Anwendungsfall diskutieren, werden Sie oft feststellen, dass Sie keine regulären Ausdrücke benötigen. Einfache State-Maschinen zur Anpassung von Parenthases lassen sich recht einfach in Lisp schreiben. Ein Blick auf die Quelle von Pa - redit ist ein guter Anfang.
Wenn Sie noch interessiert sind, schauen Sie sich cexp.el an.
Es ist nur ein Hack, aber dient vielleicht Ihrem Zweck.
Sie können nach kombinierten regulären und ausgeglichenen Ausdrücken mit cexp-search-forward
suchen.
Das eingebaute re-search-forward
wird für reguläre Ausdrücke verwendet und daher gelten die Syntaxregeln. Ausgeglichene Ausdrücke können mit den zusätzlichen Syntaxelementen \!(
und \!)
abgeglichen werden.
Die schwerwiegendste Einschränkung ist, dass ausgeglichene Ausdrücke nicht in Gruppen vorkommen dürfen. Ein Konstrukt wie \!(^{ \(\!(^{.*}$\!)\)+ }$\!)
funktioniert nicht, weil die Gruppe den inneren ausgeglichenen Ausdruck enthält.
Dennoch ist ein nützliches Beispiel die Übereinstimmung von TeX-Definitionen wie
%Vor%mit kombinierten Ausdrücken wie
%Vor%Die Suche über cexp-search-forward mit dem obigen cexp gibt die Limits für die folgenden Gruppen zurück:
\def\mdo#1
#1
{{\def\next{\relax}\def\tmp{#1}\ifx\next\tmp\else\def\next{#1\mdo}\expandafter}\next}