Auf https://www.emacswiki.org/emacs/MultilineRegexp findet man den zu verwendenden Hinweis
[\ 0- \ 377 [: nonascii:]] * \ n
anstelle des Standards
. * \ n
um ein beliebiges Zeichen einer neuen Zeile zuzuordnen, um einen Stapelüberlauf für große Texte (37 KB) zu vermeiden. Ist der Überlauf hier das Problem, oder ist ein Matching-Lauf für den ersteren auch performanter als für den letzteren?
quelle
[\0-\377[:nonascii:]]*
dann weniger tun würde\\(.\\|\n\\)*
. Ich denke, das Emacswiki ist in diesem Fall falsch.|
möglicherweise mehr Backtracking benötigt, aber ob dies tatsächlich der Fall ist, hängt davon ab, wie er kompiliert wird.[\0-\377[:nonascii:]]*
(was eher ungewöhnlich ist, da Sie ihn genauso gut verwendenpoint-max
und nicht über einen solchen regulären Ausdruck suchen können) (für Neugierige: Der springende Punkt ist, ob die Zeichensätze übereinstimmen können nach dem * ist dijunkt von dem Satz von Zeichen , die innerhalb der * mithalten können. Wenn es disjunkt ist, dann überspringt der regexp Motor Zwischenschritte aufzeichnen und somit vermeidet Stapelspeicherplatz auffressen. So.*\n
und[^a]*a
nicht verbraucht den Stapel, während.*a
tut).