Quelle est l'expression rationnelle pour correspondre à un caractère de nouvelle ligne?

22

Dans l'expression régulière Emacs, \nne correspond pas à un nouveau caractère de ligne \n.

  1. Suis-je correct qui $correspond à la position entre un nouveau caractère de ligne et le caractère juste avant le nouveau caractère de ligne. par exemple pour une chaîne abc\n, $correspond à la position entre cet \n?
  2. Quelle est l'expression rationnelle qui correspond \n?
StackExchange pour tous
la source
2
Pourriez-vous fournir un exemple de travail minimum? Peut-être que je manque quelque chose, mais ça (re-search-forward "\n")marche bien pour moi.
Dan
1
Votre fichier peut utiliser \ r \ n pour les nouvelles lignes et il se peut que vous deviez inclure \ r dans votre expression rationnelle, donc abc\r\nau lieu de abc\n.
Jordon Biondo
@Dan: CM et Mx se produisent tous les deux correspondent \nà n. mon tampon est en mode fondamental. Cela arrive à n'importe quel texte, donc tout texte avec une nouvelle ligne ou lettre nest un exemple de travail
StackExchange for All
@Jordon: et Mx se produisent CMs les deux correspondent \r\nàrn
StackExchange pour tous
@Tim, oui parce que si vous les saisissez de manière interactive, vous devez faire des insertions entre guillemets, Cq Cm et Cq Cj respectivement. Vous pouvez saisir \ r \ n si vous les saisissez dans une chaîne lisp.
Jordon Biondo

Réponses:

19
  1. Oui. $correspond à la fin de la ligne , pas au caractère de nouvelle ligne qui vient après la fin de la ligne.
  2. Faites C-M-s C-q C-j. C-qest la liaison par défaut pour quoted-insertet fonctionne également dans le mini-tampon. Cette expression recherche littéralement une nouvelle ligne: C-j.
Kaushal Modi
la source
1
2. dites-vous que le nouveau caractère de ligne ne peut pas être représenté comme une séquence d'échappement dans l'expression régulière d'Emacs?
StackExchange for All
3
Que vous recherchiez une nouvelle ligne de manière interactive ou via elisp (par exemple, (looking-at "^J")^ J est inséré par C-q C-j), l' C-q C-japproche fonctionne toujours. Mais lorsque vous utilisez des fonctions elisp comme les mêmes, cela looking-at \nfonctionne aussi; M-: (looking-at "\n") RETsera évalué à true si le curseur se trouve à la fin de la ligne (et il y a une nouvelle ligne après cela).
Kaushal Modi
2
Juste pour mentionner, si vous utilisez regexp-builder, vous pouvez reconnaître une nouvelle ligne avec [\n].
Nsukami _
@Nsukami_: et Mx se produisent CMs les deux correspondent [\n]à n.
StackExchange for All
13

Comme Dan le commente, l'expression 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 as "\n". Il n'y a pas de syntaxe supplémentaire spécifique spécifique à regexp pour cela - vous utilisez simplement une nouvelle ligne, exactement comme n'importe quel autre caractère littéral.

Si vous entrez une expression rationnelle de manière interactive, vous pouvez insérer la nouvelle ligne avec C-qC-j, comme le souligne la réponse de kaushalmodi.

phils
la source
1
Merci! Dans emacs (pas dans elisp), Cq Cj est-il le seul moyen de faire correspondre un nouveau caractère de ligne? \nne correspond pas à un nouveau caractère de ligne.
StackExchange for All du
1
Oui. Eh bien, plus précisément, la saisie d'une nouvelle ligne est le seul moyen de faire correspondre un caractère de nouvelle ligne lors de la saisie interactive d'une expression rationnelle (car il n'y a pas de séquence d'échappement d'expression régulière pour une nouvelle ligne), et C-q C-jest le moyen le plus fiable de taper une nouvelle ligne à l'invite.
phils