Hvad er regex til at matche en newline-karakter?

I Emacs regex matcher \n ikke et nyt linjetegn \n.

  1. Er jeg korrekt, at $ matcher placeringen mellem et nyt linjetegn og tegnet lige før det nye linjetegn, f.eks. for en streng abc\n, $ matcher positionen mellem c og \n?
  2. Hvad er den regex, der matcher \n?

Kommentarer

  • Kunne du give et minimumseksempel? Måske ' mangler noget, men (re-search-forward "\n") fungerer fint for mig.
  • Din fil bruger muligvis \ r \ n til nye linjer, og det kan være, at du skal medtage \ r i din regexp, så abc\r\n i stedet for abc\n.
  • @Dan: CMs og Mx forekommer begge \n til n. min buffer er i grundlæggende tilstand. Dette sker for enhver tekst, så enhver tekst med ny linje eller bogstav n er et fungerende eksempel
  • @Jordon: CMs og Mx forekommer begge matcher \r\n til rn
  • @Tim, ja for hvis du indtaster dem interaktivt, ' d har brug for at lave en citeret indsats, henholdsvis Cq Cm og Cq Cj. Du kunne indtaste \ r \ n hvis du indtastede dem i en lisp-streng.

Svar

  1. Ja. $ matcher slutningen af linjen , ikke newline-tegnet som kommer efter linjens afslutning.
  2. Gør C-M-s C-q C-j. C-q er standardbindingen til quoted-insert og fungerer også i minibufferen. Dette udtryk søger bogstaveligt talt efter en ny linje: C-j.

Kommentarer

  • 2. siger du, at den nye linjekarakter ikke kan repræsenteres som en escape-sekvens i Emacs regex?
  • Uanset om du søger efter en ny linje interaktivt eller via elisp (f.eks. (looking-at "^J") hvor ^ J indsættes af C-q C-j), tilgangen C-q C-j fungerer altid. Men når du bruger elisp-funktioner som den samme looking-at \n fungerer også; M-: (looking-at "\n") RET vil være sandt, hvis markøren er i slutningen af linjen (og der ' er en ny linje efter det).
  • Bare for at nævne, hvis du bruger regexp-builder, er du ' i stand til at genkende en ny linje med [\n].
  • @Nsukami_: CMer og Mx forekommer begge [\n] til n.

Svar

Som Dan kommenterer, er det regex, der matcher en ny linje en ny linje .

Du kan repræsentere en ny linje i en citeret streng i elisp som "\n". Der er ingen særlig yderligere regexp-specifik syntaks til dette – du bruger bare en ny linje, nøjagtigt som enhver anden bogstavelig karakter.

Hvis du indtaster en regexp interaktivt så kan du indsætte den nye linje med Cq Cj , som kaushalmodis svar påpeger.

Kommentarer

  • Tak! I emacs (ikke i elisp), er Cq Cj den eneste måde at matche et nyt linjetegn på? \n ikke ' matcher ikke et nyt linjetegn.
  • Ja. Mere specifikt er at skrive en ny linje den eneste måde at matche et nyt linjetegn, når du indtaster en regexp interaktivt (da der ikke er nogen regexp escape-sekvens for en ny linje), og C-q C-j er den mest pålidelige måde at skrive en ny linje på en prompt.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *