Qual è la regex per abbinare un personaggio newline?


22

In Emacs regex, \nnon corrisponde a un nuovo carattere di linea \n.

  1. Ho ragione che $corrisponde alla posizione tra un nuovo carattere di linea e il personaggio proprio prima del nuovo carattere di linea. ad es. per una stringa abc\n, $corrisponde alla posizione tra ce \n?
  2. Qual è la regex che corrisponde \n?

2
Potresti fornire un esempio minimo di lavoro? Forse mi manca qualcosa, ma (re-search-forward "\n")funziona bene per me.
Dan

1
Il tuo file potrebbe usare \ r \ n per le nuove righe e potrebbe essere necessario includere \ r nella tua regexp, quindi abc\r\ninvece di abc\n.
Jordon Biondo,

@ Dan: CM e Mx si verificano entrambe partita \na n. il mio buffer è in modalità Fondamentale. Questo succede a qualsiasi testo, quindi qualsiasi testo con una nuova riga o lettera nè un esempio funzionante
StackExchange per All

@Jordon: CMs e Mx si verificano entrambi corrispondono \r\narn
StackExchange per All

@Tim, sì, perché se si inseriscono in modo interattivo, è necessario eseguire rispettivamente inserti tra virgolette, Cq Cm e Cq Cj. Puoi inserire \ r \ n se li inserissi in una stringa lisp.
Jordon Biondo,

Risposte:


19
  1. Sì. $corrisponde alla fine della riga , non al carattere di nuova riga che segue la fine della riga.
  2. Fare C-M-s C-q C-j. C-qè l'associazione predefinita per quoted-inserte funziona anche nel minibuffer. Questa espressione cerca letteralmente per una nuova riga: C-j.

1
2. stai dicendo che il nuovo carattere di linea non può essere rappresentato come una sequenza di escape nella regex di Emacs?
StackExchange per tutto il

3
Sia che cerchi una nuova riga in modo interattivo o tramite elisp (ad esempio, (looking-at "^J")dove ^ J è inserito da C-q C-j), l' C-q C-japproccio funziona sempre. Ma quando si usano le funzioni elisp, anche le stesse looking-at \nfunzionano; M-: (looking-at "\n") RETvaluterà su true se il cursore si trova alla fine della riga (e dopo c'è una nuova riga).
Kaushal Modi,

2
Solo per citare, se si utilizza regexp-builder, è possibile riconoscere una nuova riga con [\n].
Nsukami _

@Nsukami_: CM e Mx si verificano entrambe partita [\n]a n.
StackExchange per tutto il

13

Come commenta Dan, la regex che corrisponde a una nuova riga è una nuova riga.

È possibile rappresentare una nuova riga in una stringa tra virgolette in elisp as "\n". Non esiste una sintassi aggiuntiva specifica per regexp specifica per questo: basta usare una nuova riga, esattamente come qualsiasi altro personaggio letterale.

Se stai inserendo una regexp in modo interattivo , puoi inserire la nuova riga con C-qC-j, come sottolinea la risposta di kaushalmodi.


1
Grazie! In emacs (non in elisp), Cq Cj è l'unico modo per abbinare un nuovo carattere di linea? \nnon corrisponde a un nuovo carattere di linea.
StackExchange per tutto il

1
Sì. Bene, più specificamente, digitare una nuova riga è l'unico modo per abbinare un carattere di nuova riga quando si immette una regexp in modo interattivo (poiché non esiste una sequenza di escape regexp per una nuova riga) ed C-q C-jè il modo più affidabile per digitare una nuova riga a un prompt.
phils,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.