Hva er regex for å matche en newline-karakter?

I Emacs regex samsvarer \n ikke et nytt linjetegn \n.

  1. Klarer jeg at $ samsvarer med posisjonen mellom et nytt linjetegn og tegnet rett før det nye linjetegnet. for en streng abc\n, $ samsvarer med posisjonen mellom c og \n?
  2. Hva er regex som samsvarer med \n?

Kommentarer

  • Kan du gi et minimumseksempel? Kanskje jeg ' mangler noe, men (re-search-forward "\n") fungerer bra for meg.
  • Filen din kan bruke \ r \ n til nye linjer, og det kan være at du må inkludere \ r i regexpen din, så abc\r\n i stedet for abc\n.
  • @Dan: CMs og Mx forekommer begge \n til n. bufferen min er i grunnleggende modus. Dette skjer med hvilken som helst tekst, så enhver tekst med ny linje eller bokstav n er et fungerende eksempel
  • @Jordon: CMs og Mx forekommer begge samsvarer med \r\n til rn
  • @Tim, ja fordi hvis du skriver dem interaktivt, ' d trenger å gjøre et sitert innlegg, henholdsvis Cq Cm og Cq Cj. Du kan angi \ r \ n hvis du skriver dem inn i en lisp-streng.

Svar

  1. Ja. $ samsvarer med slutten av linjen , ikke newline-tegnet som kommer etter slutten av linjen.
  2. Gjør C-M-s C-q C-j. C-q er standardbindingen for quoted-insert og fungerer også i minibufferen. Dette uttrykket søker bokstavelig talt etter en ny linje: C-j.

Kommentarer

  • 2. sier du at det nye linjetegnet ikke kan vises som en rømningssekvens i Emacs regex?
  • Enten du søker etter en ny linje interaktivt eller via elisp (f.eks. (looking-at "^J") hvor ^ J settes inn av C-q C-j), C-q C-j -tilnærmingen fungerer alltid. Men når du bruker elisp-funksjoner som den samme looking-at \n fungerer også; M-: (looking-at "\n") RET vil være sant hvis markøren er på slutten av linjen (og der ' er en ny linje etter det).
  • Bare for å nevne, hvis du bruker regexp-builder, kan du ' gjenkjenne en ny linje med [\n].
  • @Nsukami_: CMs og Mx forekommer begge [\n] til n.

Svar

Som Dan kommenterer, er regex som samsvarer med en ny linje en ny linje .

Du kan representere en ny linje i en sitert streng i elisp som "\n". Det er ingen spesiell ekstra regexp-spesifikk syntaks for dette – du bruker bare en ny linje, akkurat som alle andre bokstavelige tegn.

Hvis du skriver inn en regexp interaktivt så kan du sette inn den nye linjen med Cq Cj , som kaushalmodis svar påpeker.

Kommentarer

  • Takk! I emacs (ikke i elisp), er Cq Cj den eneste måten å matche et nytt linjetegn? \n ikke ' matcher ikke et nytt linjetegn.
  • Ja. Mer spesifikt, å skrive en ny linje er den eneste måten å matche et nytt linjetegn når du skriver inn en regexp interaktivt (ettersom det ikke er noen regexp-escape-sekvens for en ny linje), og C-q C-j er den mest pålitelige måten å skrive en ny linje på en melding.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *