Em https://www.emacswiki.org/emacs/MultilineRegexp, encontra-se a dica para usar
[\ 0- \ 377 [: nonascii:]] * \ n
em vez do padrão
. * \ n
para corresponder qualquer caractere até uma nova linha para evitar o estouro de pilha para textos grandes (37 KB). O estouro é a preocupação aqui, ou uma execução correspondente para o primeiro também é mais eficiente que o último?
fonte
[\0-\377[:nonascii:]]*
que faria isso menos do que isso\\(.\\|\n\\)*
. Então eu acho que o emacswiki está errado neste.|
pode precisar de mais retorno, mas se ele realmente depende de como é compilado.[\0-\377[:nonascii:]]*
(o que é bastante incomum, pois você pode usá-lo empoint-max
vez de procurá-lo por meio de um regexp) (para os curiosos: o cerne da questão é se o conjunto de caracteres que pode corresponder após a * é disjunto do conjunto de caractere que pode corresponder dentro do *. Se for disjuntos, então o motor regexp irá ignorar a gravação de passos intermediários, e, portanto, evitar comer-se espaço de pilha. então,.*\n
e[^a]*a
não consumir a pilha, enquanto.*a
faz).