Vad är regex som matchar en nylinjetecken?

I Emacs regex matchar \n inte ett nytt radtecken \n.

  1. Stämmer jag att $ matchar positionen mellan en ny rad och karaktären precis före den nya linjetecknet. för en sträng abc\n, $ matchar positionen mellan c och \n?
  2. Vad är regex som matchar \n?

Kommentarer

  • Kan du ge ett minsta fungerande exempel? Jag kanske ' saknar något, men (re-search-forward "\n") fungerar bra för mig.
  • Din fil kan använda \ r \ n för nya rader och det kan vara så att du måste inkludera \ r i din regexp, så abc\r\n istället för abc\n.
  • @Dan: CMs och Mx uppträder båda \n till n. min buffert är i grundläge. Detta händer med vilken text som helst, så all text med ny rad eller bokstav n är ett fungerande exempel
  • @Jordon: CMs och Mx förekommer båda matchar \r\n till rn
  • @Tim, ja för om du anger dem interaktivt <

d behöver göra ett citerat inlägg, Cq Cm respektive Cq Cj. Du kan ange \ r \ n om du skriver in dem i en lisp-sträng.

Svar

  1. Ja. $ matchar slutet av raden , inte newline-tecknet som kommer efter radens slut.
  2. Gör C-M-s C-q C-j. C-q är standardbindningen för quoted-insert och fungerar också i minibufferten. Detta uttryck söker bokstavligen efter en ny rad: C-j.

Kommentarer

  • 2. säger du att den nya linjetecknet inte kan representeras som en escape-sekvens i Emacs regex?
  • Om du söker efter en ny linje interaktivt eller via elisp (t.ex. (looking-at "^J") där ^ J infogas av C-q C-j), C-q C-j tillvägagångssätt fungerar alltid. Men när du använder elisp-funktioner som samma looking-at \n fungerar också; M-: (looking-at "\n") RET kommer att vara sant om markören är i slutet av raden (och där ' är en ny rad efter det).
  • Bara för att nämna, om du använder regexp-builder, kan du ' känna igen en ny rad med [\n].
  • @Nsukami_: CM och Mx förekommer båda [\n] till n.

Svar

Som Dan kommenterar är regex som matchar en ny rad en ny rad .

Du kan representera en ny rad i en citerad sträng i elisp som "\n". Det finns ingen speciell ytterligare regexp-specifik syntax för detta – du använder bara en ny linje, precis som alla andra bokstavliga tecken.

Om du anger en regexp interaktivt då kan du infoga den nya raden med Cq Cj , som kaushalmodis svar påpekar.

Kommentarer

  • Tack! Är emellertid Cq Cj det enda sättet att matcha ett nytt radtecken i emacs (inte i elisp)? \n inte ' matchar inte ett nytt linjetecken.
  • Ja. Närmare bestämt är att skriva en ny rad det enda sättet att matcha ett nytt linjetecken när du anger en regexp interaktivt (eftersom det inte finns någon regexp-escape-sekvens för en ny rad), och C-q C-j är det mest pålitliga sättet att skriva en ny linje vid en prompt.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *