Qual é a regex para corresponder a um caractere de nova linha?

21

No regex do Emacs, \nnão corresponde a um novo caractere de linha \n.

  1. Estou correto que $corresponde à posição entre um novo caractere de linha e o caractere logo antes do novo caractere de linha. por exemplo, para uma string abc\n, $corresponde à posição entre ce \n?
  2. Qual é o regex que corresponde \n?
Tim
fonte
2
Você poderia fornecer um exemplo de trabalho mínimo? Talvez esteja faltando alguma coisa, mas (re-search-forward "\n")funcione bem para mim.
Dan
1
Seu arquivo pode usar \ r \ n para novas linhas e pode ser que você precise incluir \ r no seu regexp, então, em abc\r\nvez de abc\n.
Jordon Biondo
@ Dan: CMs e Mx ocorrem ambos correspondentes \na n. meu buffer está no modo Fundamental. Isso acontece com qualquer texto, portanto, qualquer texto com nova linha ou letra né um exemplo
prático
@Jordon: CMs e Mx ocorrem ambos combinados \r\ncomrn
Tim
@ Tim, sim, porque se você os estiver inserindo interativamente, será necessário fazer inserções entre aspas, Cq Cm e Cq Cj, respectivamente. Você pode inserir \ r \ n se estiver inserindo-os em uma string lisp.
Jordon Biondo 27/02

Respostas:

19
  1. Sim. $corresponde ao final da linha , não ao caractere de nova linha que vem após o final da linha.
  2. Faça C-M-s C-q C-j. C-qé a ligação padrão para quoted-inserte também funciona no minibuffer. Esta expressão literalmente procura por uma nova linha: C-j.
Kaushal Modi
fonte
1
2. você está dizendo que o novo caractere de linha não pode ser representado como uma sequência de escape no regex do Emacs?
Tim
3
Seja procurando uma nova linha interativamente ou via elisp (por exemplo, (looking-at "^J")onde ^ J é inserido por C-q C-j), a C-q C-jabordagem sempre funciona. Mas ao usar funções elisp, o mesmo looking-at \ntambém funciona; M-: (looking-at "\n") RETserá avaliado se o cursor estiver no final da linha (e houver uma nova linha depois disso).
Kaushal Modi
2
Apenas para mencionar, se estiver usando regexp-builder, você poderá reconhecer uma nova linha com [\n].
Nsukami _
@Nsukami_: CMs e Mx ocorrem ambos iguais [\n]a n.
Tim
13

Como comenta Dan, o regex que corresponde a uma nova linha é uma nova linha.

Você pode representar uma nova linha em uma string entre aspas no elisp como "\n". Não existe uma sintaxe específica específica para o regexp adicional - basta usar uma nova linha, exatamente como qualquer outro caractere literal.

Se você estiver inserindo uma regexp interativamente , poderá inserir a nova linha com C-qC-j, como a resposta de kaushalmodi aponta.

phils
fonte
1
Obrigado! No emacs (não no elisp), Cq Cj é a única maneira de corresponder a um novo caractere de linha? \nnão corresponde a um novo caractere de linha.
Tim
1
Sim. Bem, mais especificamente, digitar uma nova linha é a única maneira de corresponder a um caractere de nova linha ao inserir um regexp interativamente (como não há uma sequência de escape de regexp para uma nova linha) e C-q C-jé a maneira mais confiável de digitar uma nova linha em um prompt.
phils