Care este regexul pentru a se potrivi cu un personaj de linie nouă?

În regex-ul Emacs, \n nu se potrivește cu un nou caracter de linie \n.

  1. Am dreptate că $ corespunde poziției dintre un nou caracter de linie și caracterul chiar înainte de noul caracter de linie. pentru un șir abc\n, $ corespunde poziției dintre c și \n?
  2. Care este regexul care se potrivește cu \n?

Comentarii

  • Ați putea oferi un exemplu de lucru minim? Poate că ' îmi lipsește ceva, dar (re-search-forward "\n") funcționează bine pentru mine.
  • Este posibil ca fișierul dvs. să utilizeze \ r \ n pentru linii noi și poate fi necesar să includeți \ r în regexp, deci abc\r\n în loc de abc\n.
  • @Dan: CM și Mx apar ambele se potrivesc cu \n la n. bufferul meu este în modul fundamental. Acest lucru se întâmplă oricărui text, deci orice text cu o nouă linie sau literă n este un exemplu de lucru
  • @Jordon: CM și Mx apar ambele se potrivesc cu \r\n la rn
  • @Tim, da, deoarece dacă le introduceți interactiv, ' d trebuie să facă inserții citate, Cq Cm și respectiv Cq Cj. Ați putea introduce \ r \ n dacă le-ați introduce într-un șir lisp.

Răspuns

  1. Da. $ se potrivește cu sfârșitul liniei , nu cu caracterul newline care vine după sfârșitul liniei.
  2. Faceți C-M-s C-q C-j. C-q este legătura implicită pentru quoted-insert și funcționează și în minibuffer. Această expresie caută literalmente o linie nouă: C-j.

Comentarii

  • 2. spuneți că noul caracter de linie nu poate fi reprezentat ca o secvență de evacuare în regex-ul Emacs?
  • Indiferent dacă căutați o linie nouă interactiv sau prin elisp (de ex. (looking-at "^J") ^ J este inserat de C-q C-j), abordarea C-q C-j funcționează întotdeauna. Dar când se utilizează funcții elisp ca aceleași, funcționează și looking-at \n; M-: (looking-at "\n") RET va evalua la adevărat dacă cursorul se află la sfârșitul liniei (și acolo ' o linie nouă după aceea).
  • Doar pentru a menționa, dacă utilizați regexp-builder, ' puteți recunoaște o nouă linie cu [\n].
  • @Nsukami_: CM și Mx apar ambele se potrivesc cu [\n] cu n.

Răspuns

După cum comentează Dan, regexul care corespunde unei linii noi este o linie nouă .

Puteți reprezenta o linie nouă într-un șir citat în elisp ca "\n". Nu există o sintaxă specială specifică regexp pentru aceasta – pur și simplu folosiți o linie nouă, exact ca orice alt caracter literal.

Dacă introduceți o regexp interactiv apoi puteți introduce noua linie cu Cq Cj , așa cum subliniază răspunsul lui kaushalmodi.

Comentarii

  • Mulțumesc! În emacs (nu în elisp), Cq Cj este singura modalitate de a se potrivi cu un nou caracter de linie? \n doesn ' nu se potrivește cu un nou caracter de linie.
  • Da. Ei bine, mai precis, tastarea unei linii noi este singura modalitate de a potrivi un caracter de linie nouă atunci când introduceți un regexp interactiv (deoarece nu există o secvență de evadare regexp pentru o linie nouă), iar C-q C-j este cel mai fiabil mod de a tasta o linie nouă la prompt.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *