Wat is de regex die overeenkomt met een newline-teken?

In Emacs regex komt \n niet “overeen met een nieuw regelteken \n.

  1. Klopt het dat $ overeenkomt met de positie tussen een nieuw lijnteken en het teken vlak voor het nieuwe lijnteken. bijv. voor een tekenreeks abc\n, $ komt overeen met de positie tussen c en \n?
  2. Wat is de regex die overeenkomt met \n?

Reacties

  • Kunt u een minimaal werkend voorbeeld geven? Misschien ' m mis ik iets, maar (re-search-forward "\n") werkt prima voor mij.
  • Uw bestand gebruikt mogelijk \ r \ n voor nieuwe regels en het kan zijn dat u \ r in uw regexp moet opnemen, dus abc\r\n in plaats van abc\n.
  • @Dan: CMs en Mx komen beide overeen met \n naar n. mijn buffer staat in de fundamentele modus. Dit gebeurt met elke tekst, dus elke tekst met een nieuwe regel of letter n is een werkend voorbeeld
  • @Jordon: CMs en Mx komen beide overeen met \r\n naar rn
  • @Tim, ja, want als je ze interactief invoert, ' d moeten respectievelijk een tussenvoegsel tussen aanhalingstekens doen, Cq Cm en Cq Cj. Je zou \ r \ n kunnen invoeren als je ze in een lisp-string invoert.

Answer

  1. Ja. $ komt overeen met het einde van de regel , niet het newline-teken dat na het einde van de regel komt.
  2. Doe C-M-s C-q C-j. C-q is de standaardbinding voor quoted-insert en werkt ook in de minibuffer. Deze uitdrukking zoekt letterlijk naar een nieuwe regel: C-j.

Reacties

  • 2. zeg je dat het teken voor een nieuwe regel niet kan worden weergegeven als een escape-reeks in de Emacs-regex?
  • Of je nu interactief naar een nieuwe regel zoekt of via elisp (bijv. (looking-at "^J") waar ^ J wordt ingevoegd door C-q C-j), de C-q C-j benadering werkt altijd. Maar bij het gebruik van elisp-functies zoals hetzelfde werkt looking-at \n ook; M-: (looking-at "\n") RET zal waar zijn als de cursor aan het einde van de regel staat (en daarna ' een nieuwe regel).
  • Gewoon om te vermelden dat als u regexp-builder gebruikt, u ' een nieuwe regel kunt herkennen met [\n].
  • @Nsukami_: CMs en Mx komen beide overeen met [\n] naar n.

Answer

Zoals Dan opmerkt, de reguliere expressie die overeenkomt met een nieuwe regel is een nieuwe regel .

Je kunt een nieuwe regel in een string tussen aanhalingstekens in elisp weergeven als "\n". Er is geen speciale aanvullende regexp-specifieke syntaxis hiervoor – je gebruikt gewoon een nieuwe regel, precies zoals elk ander letterlijke teken.

Als je een regexp interactief invoert dan kun je de nieuwe regel invoegen met Cq Cj , zoals het antwoord van kaushalmodi aangeeft.

Reacties

  • Bedankt! Is Cq Cj in emacs (niet in elisp) de enige manier om een nieuw lijnteken te matchen? \n niet ' t komt overeen met een teken voor een nieuwe regel.
  • Ja. Nou, meer specifiek, het typen van een nieuwe regel is de enige manier om een teken voor een nieuwe regel te vinden bij het invoeren van een regexp interactief (aangezien er geen regexp escape-reeks is voor een nieuwe regel), en C-q C-j is de meest betrouwbare manier om een nieuwe regel bij een prompt te typen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *