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

No regex Emacs, \n não “corresponde a um caractere de nova linha \n.

  1. Estou correto que $ corresponde à posição entre um caractere de nova linha e o caractere logo antes do caractere de nova linha. para uma string abc\n, $ corresponde à posição entre c e \n?
  2. Qual é o regex que corresponde a \n?

Comentários

  • Você poderia fornecer um exemplo de trabalho mínimo? Talvez eu ' esteja faltando alguma coisa, mas (re-search-forward "\n") funciona bem para mim.
  • Seu arquivo pode usar \ r \ n para novas linhas e pode ser que você precise incluir \ r em sua regexp, então abc\r\n em vez de abc\n.
  • @Dan: CMs e Mx ocorrem ambos correspondem a \n para 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 correspondem a \r\n para rn
  • @Tim, sim porque se você os inserir interativamente, você ' d precisa fazer inserções entre aspas, Cq Cm e Cq Cj respectivamente. Você poderia inserir \ r \ n se os estivesse inserindo em uma string lisp.

Resposta

  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-insert e também funciona no minibuffer. Esta expressão pesquisa literalmente por uma nova linha: C-j.

Comentários

  • 2. você está dizendo que o caractere de nova linha não pode ser representado como uma sequência de escape no regex do Emacs?
  • Quer procurando por uma nova linha interativamente ou via elisp (por exemplo, (looking-at "^J") onde ^ J é inserido por C-q C-j), a abordagem C-q C-j sempre funciona. Mas ao usar funções elisp como o mesmo, looking-at \n também funciona; M-: (looking-at "\n") RET será avaliado como verdadeiro se o cursor estiver no final da linha (e houver ' uma nova linha depois disso).
  • Apenas para mencionar, se usar regexp-builder, você ' será capaz de reconhecer uma nova linha com [\n].
  • @Nsukami_: CMs e Mx ocorrem ambos correspondem [\n] a n.

Resposta

Conforme comentários de 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 há sintaxe específica de regexp adicional especial para isso – você apenas usa uma nova linha, exatamente como qualquer outro caractere literal.

Se você estiver inserindo uma regexp interativamente então você pode inserir a nova linha com Cq Cj , como indica a resposta de kaushalmodi.

Comentários

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *