Dans Emacs regex, \n ne « correspond pas à un caractère de nouvelle ligne \n.
- Ai-je raison de dire que
$correspond à la position entre un caractère de nouvelle ligne et le caractère juste avant le caractère de nouvelle ligne. par exemple pour une chaîneabc\n,$correspond à la position entrecet\n? - Quelle est lexpression régulière qui correspond à
\n?
Commentaires
Réponse
- Oui.
$correspond à la fin de la ligne , et non au caractère de nouvelle ligne qui vient après la fin de la ligne. - Faites
C-M-s C-q C-j.C-qest la liaison par défaut pourquoted-insertet fonctionne également dans le minibuffer. Cette expression recherche littéralement une nouvelle ligne:C-j.
Commentaires
- 2. dites-vous que le caractère de nouvelle ligne ne peut pas être représenté comme une séquence déchappement dans Emacs regex?
- Que vous recherchiez une nouvelle ligne de manière interactive ou via elisp (par exemple
(looking-at "^J")où ^ J est inséré parC-q C-j), lapprocheC-q C-jfonctionne toujours. Mais lorsque vous utilisez des fonctions elisp comme les mêmes,looking-at\nfonctionne aussi;M-: (looking-at "\n") RETsera évalué à vrai si le curseur est à la fin de la ligne (et il y a ' une nouvelle ligne après cela). - Juste pour mentionner que si vous utilisez
regexp-builder, vous ' pouvez reconnaître une nouvelle ligne avec[\n]. - @Nsukami_: CM et Mx correspondent tous les deux
[\n]àn.
Réponse
Comme le fait remarquer Dan, lexpression régulière qui correspond à une nouvelle ligne est une nouvelle ligne .
Vous pouvez représenter une nouvelle ligne dans une chaîne entre guillemets dans elisp comme "\n". Il ny a pas de syntaxe supplémentaire spéciale spécifique aux regexp pour cela – vous utilisez simplement une nouvelle ligne, exactement comme tout autre caractère littéral.
Si vous entrez une expression régulière de manière interactive alors vous pouvez insérer la nouvelle ligne avec Cq Cj , comme le souligne la réponse de kaushalmodi.
Commentaires
- Merci! Dans emacs (pas dans elisp), Cq Cj est-il le seul moyen de faire correspondre un caractère de nouvelle ligne?
\nne ' t correspond à un caractère de nouvelle ligne. - Oui. Plus précisément, taper une nouvelle ligne est le seul moyen de faire correspondre un caractère de nouvelle ligne lors de la saisie dun regexp de manière interactive (car il ny a pas de séquence déchappement de regexp pour une nouvelle ligne), et
C-q C-jest le moyen le plus fiable de taper une nouvelle ligne à une invite.
(re-search-forward "\n")fonctionne bien pour moi.abc\r\nau lieu deabc\n.\nàn. mon tampon est en mode fondamental. Cela arrive à nimporte quel texte, donc tout texte avec une nouvelle ligne ou une nouvelle lettrenest un exemple de travail\r\nàrn