În regex-ul Emacs, \n
nu se potrivește cu un nou caracter de linie \n
.
- Am dreptate că
$
corespunde poziției dintre un nou caracter de linie și caracterul chiar înainte de noul caracter de linie. pentru un șirabc\n
,$
corespunde poziției dintrec
și\n
? - Care este regexul care se potrivește cu
\n
?
Comentarii
Răspuns
- Da.
$
se potrivește cu sfârșitul liniei , nu cu caracterul newline care vine după sfârșitul liniei. - Faceți
C-M-s C-q C-j
.C-q
este legătura implicită pentruquoted-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 deC-q C-j
), abordareaC-q C-j
funcționează întotdeauna. Dar când se utilizează funcții elisp ca aceleași, funcționează șilooking-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]
cun
.
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.
(re-search-forward "\n")
funcționează bine pentru mine.abc\r\n
în loc deabc\n
.\n
lan
. 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\r\n
larn