Como posso praticar a pesquisa e a substituição por expressões regulares de maneira interativa no Emacs?

12

Pesquisando e substituindo usando expressões regulares é claramente uma ferramenta poderosa para o usuário do Emacs, que pode executar rotineiramente essas ações. No entanto, como iniciante no Emacs (e / ou programação), expressões regulares precisam ser aprendidas e praticadas.

Posso aprender e treinar expressões regulares de maneira interativa no Emacs, da mesma forma que no tutorial interno do Emacs? Caso contrário, quais são as outras sugestões para utilizar o Emacs para praticar o uso de expressões regulares para pesquisar e substituir?

Felix Z. Hoffmann
fonte
1
Esta documentação está meio completa: wikemacs.org/wiki/Regexp
Ehvince

Respostas:

17

Além disso, regexp-buildervocê também pode considerar visual-regexp para fornecer feedback visual sobre a substituição em andamento:

instantâneo visual-regexp

immerrr
fonte
3
Ou até anzu, o que faz o mesmo e mais.
Sanityinc
16

Você pode tentar M-x regexp-builder RETqual é um comparador de expressões regulares interativo, isso não é ruim

Dave F
fonte
7
Não entre em pânico quando C-gnão sair como você espera. C-c C-qé a combinação de teclas padrão para sair do regexp builder quando você terminar de praticar.
Nispio 8/08
5

Eu uso o regexp-builderque permite testar regexps interativamente e obter feedback. E, é claro, uma vez que comecei a usar isso, imediatamente me perguntei "Como faço para alimentar esse regexp query-replace-regexp?"

A resposta que escolhi é a seguinte função definida na página do EmacsWiki ReBuilder .

(defun reb-query-replace (to-string)
  "Replace current RE from point with `query-replace-regexp'."
  (interactive
   (progn (barf-if-buffer-read-only)
          (list (query-replace-read-to (reb-target-binding reb-regexp)
                                       "Query replace"  t))))
  (with-current-buffer reb-target-buffer
    (query-replace-regexp (reb-target-binding reb-regexp) to-string)))

Então, meu fluxo de trabalho é:

  1. M-x re-builder
  2. tipo tipo
  3. M-x reb-query-replace
Mr. Wacky
fonte
3

Pode ser uma tremenda ajuda ao aprender a usar regexps para ver o que corresponde a quais partes de uma regexp - em particular, grupos regexp. E fazer isso de forma interativa e incremental.

Na linha da resposta do @ immerr, a pesquisa Icicles teve destaque semelhante por um longo tempo.

insira a descrição da imagem aqui

Desenhou
fonte
3

Você também pode usar helm-regexp que exibe grupos de regex separadamente.

Tu Do
fonte
1

Não no emacs, mas http://rubular.com/ é basicamente regexp-builderuma folha de dicas. Você pode configurar um exemplo e cuspir um link para esse exemplo. Eu uso isso ao discutir regex com uma equipe.

Aaron Lee
fonte
1
Ruby usa Regexp com sabor emacs?
Nispio 8/08
1

Como alternativa aos Dave F, regexp-buildervocê também pode criar texto arbitrário para praticar a correspondência de padrões.

O recurso mais útil desse comando é que ele destacará correspondências no buffer à medida que o padrão é criado para ajudá-lo a garantir a correspondência adequada do padrão.

Usar (query-replace-regexp)( C-M-%) e criar uma expressão regular para executar a substituição desejada ajudará você a praticar.

Jonathan Leech-Pepin
fonte
Que benefício isso oferece a quem deseja "praticar" expressões regulares que regexp-builderainda não oferecem? O problema query-replace-regexpé que você precisa escrever um regexp inteiro e depois se comprometer com ele para descobrir o que ele corresponde. Se você não gostar do resultado, terá que começar tudo de novo. regexp-buildermostra correspondências em tempo real, o que facilita o ajuste de sua regexp até que funcione, se você não souber o que está fazendo.
Nispio 8/10
1
Admito que essa é a desvantagem. No entanto, se você estiver familiarizado com expressões regulares usando query-replace-regexpvai te usado para usá-lo em Emacs especificamente
Jonathan Sanguessuga-Pepin
Talvez ... mas não parece corresponder ao que o OP está pedindo. "Se você conhece expressões regulares", não precisa aprender nada sobre expressões regulares.
Nispio 8/08
1
O OP está perguntando como aprender como / quando usá-los interativamente como iniciante no Emacs. Eles já podem ter algum conhecimento sobre regexp de outros tipos de regexp.
Jonathan Leech-Pepin