Sur https://www.emacswiki.org/emacs/MultilineRegexp on trouve l'indice à utiliser
[\ 0- \ 377 [: nonascii:]] * \ n
au lieu de la norme
. * \ n
pour faire correspondre n'importe quel caractère jusqu'à une nouvelle ligne pour éviter le débordement de pile pour les textes volumineux (37 Ko). Le débordement est-il le problème ici, ou une exécution correspondante pour le premier est-elle également plus performante que la seconde?
la source
[\0-\377[:nonascii:]]*
ferait moins alors\\(.\\|\n\\)*
. Je pense donc que l'emacswiki a tort sur celui-ci.|
pourrait avoir besoin de plus de backtracking, mais si cela dépend de la façon dont il est compilé.[\0-\377[:nonascii:]]*
(ce qui est plutôt inhabituel, car vous pourriez aussi bien l'utiliserpoint-max
plutôt que de la rechercher via une telle expression rationnelle) (pour les curieux: le nœud du problème est de savoir si l'ensemble de caractères pouvant correspondre après que le * est disjoint de l'ensemble de caractères qui peut correspondre dans le *. S'il est disjoint, le moteur d'expression régulière sautera l'enregistrement des étapes intermédiaires et évitera donc de consommer de l'espace de pile. Donc.*\n
,[^a]*a
ne consommez pas la pile, alors que.*a
Est-ce que).