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?


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


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


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

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



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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.