In Emacs regex, \n
non “corrisponde a un nuovo carattere di riga \n
.
- Ho ragione che
$
corrisponde alla posizione tra un nuovo carattere di riga e il carattere subito prima del nuovo carattere di riga. ad es. per una stringaabc\n
,$
corrisponde alla posizione trac
e\n
? - Qual è la regex che corrisponde a
\n
?
Commenti
Answer
- Sì.
$
corrisponde alla fine della riga , non al carattere di nuova riga che viene dopo la fine della riga. - Esegui
C-M-s C-q C-j
.C-q
è lassociazione predefinita perquoted-insert
e funziona anche nel minibuffer. Questa espressione ricerca letteralmente una nuova riga:C-j
.
Commenti
- 2. stai dicendo che il carattere della nuova riga non può essere rappresentato come una sequenza di escape nella regex di Emacs?
- Sia che cerchi una nuova riga in modo interattivo o tramite elisp (ad esempio
(looking-at "^J")
dove ^ J è inserito daC-q C-j
), lapproccioC-q C-j
funziona sempre. Ma quando si utilizzano funzioni elisp come la stessalooking-at
\n
funziona anche;M-: (looking-at "\n") RET
restituirà true se il cursore si trova alla fine della riga (e dopo ' una nuova riga). - Tanto per menzionare, se utilizzi
regexp-builder
, ' sei in grado di riconoscere una nuova riga con[\n]
. - @Nsukami_: CM e Mx corrispondono entrambi da
[\n]
an
.
Risposta
Come commenta Dan, la regex che corrisponde a una nuova riga è una nuova riga .
Puoi rappresentare una nuova riga in una stringa tra virgolette in elisp come "\n"
. Non esiste una sintassi specifica per lespressione regolare aggiuntiva speciale per questo: si utilizza solo una nuova riga, esattamente come qualsiasi altro carattere letterale.
Se si immette unespressione regolare in modo interattivo quindi puoi inserire la nuova riga con Cq Cj , come indica la risposta di kaushalmodi.
Commenti
- Grazie! In emacs (non in elisp), Cq Cj è lunico modo per abbinare un nuovo carattere di riga?
\n
non ' t corrisponde a un nuovo carattere di riga. - Sì. Beh, più specificamente, digitare una nuova riga è lunico modo per trovare una corrispondenza con un carattere di nuova riga quando si immette un regexp in modo interattivo (poiché non esiste una sequenza di escape regexp per una nuova riga) e
C-q C-j
è il modo più affidabile per digitare una nuova riga a un prompt.
(re-search-forward "\n")
funziona bene per me.abc\r\n
invece diabc\n
.\n
an
. il mio buffer è in modalità fondamentale. Questo accade a qualsiasi testo, quindi qualsiasi testo con una nuova riga o letteran
è un esempio funzionante\r\n
arn