¿Cómo puedo practicar la búsqueda y el reemplazo con expresiones regulares de manera interactiva en Emacs?

12

Buscar y reemplazar usando expresiones regulares es claramente una herramienta poderosa para el usuario de Emacs que puede realizar estas acciones de manera rutinaria. Sin embargo, como principiante de Emacs (y / o programación), las expresiones regulares necesitan ser aprendidas y practicadas.

¿Puedo aprender y entrenar expresiones regulares de manera interactiva en Emacs, de manera similar al tutorial incorporado de Emacs? Si no, ¿cuáles son otras sugerencias para utilizar Emacs para practicar el uso de expresiones regulares para buscar y reemplazar?

Felix Z. Hoffmann
fuente
1
Esta documentación está un poco completa: wikemacs.org/wiki/Regexp
Ehvince

Respuestas:

17

Además regexp-builder, también puede considerar visual-regexp para proporcionarle comentarios visuales sobre el reemplazo en progreso:

instantánea visual-regexp

immerrr
fuente
3
O incluso anzu, que hace lo mismo y más.
sanityinc
16

Puedes probar M-x regexp-builder RETcuál es un emparejador interactivo de expresiones regulares, eso no está mal

Dave F
fuente
77
No entre en pánico cuando C-gno salga como esperaba. C-c C-qes la combinación de teclas predeterminada para salir del generador de expresiones regulares cuando haya terminado de practicar.
nispio
5

Utilizo el regexp-builderque le permite probar expresiones regulares de forma interactiva y obtener comentarios. Y, por supuesto, una vez que comencé a usar eso, inmediatamente me pregunté "¿Cómo puedo alimentar esta expresión regular query-replace-regexp?"

La respuesta que elegí es la siguiente función definida en la página 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)))

Entonces mi flujo de trabajo es:

  1. M-x re-builder
  2. tipo tipo tipo
  3. M-x reb-query-replace
Señor loco
fuente
3

Puede ser de gran ayuda cuando se aprende a usar expresiones regulares para ver qué coincide con qué partes de una expresión regular, en particular, los grupos de expresiones regulares. Y para hacerlo de forma interactiva e incremental.

En la línea de la respuesta de @immerr, la búsqueda de Icicles ha tenido un resaltado similar durante mucho tiempo.

ingrese la descripción de la imagen aquí

Dibujó
fuente
3

También puede usar helm-regexp que muestra grupos de expresiones regulares por separado.

Tu Do
fuente
1

No dentro de emacs, pero http://rubular.com/ es básicamente regexp-buildercon una hoja de trucos. Puede configurar un ejemplo y hacer que escupe un enlace a ese ejemplo. Lo uso cuando hablo de expresiones regulares con un equipo.

Aaron Lee
fuente
1
¿Ruby usa Regexp con sabor a emacs?
nispio
1

Como alternativa a Dave F, regexp-buildertambién puede crear texto arbitrario para practicar la coincidencia de patrones.

La característica más útil de este comando es que resaltará las coincidencias en el búfer a medida que se crea el patrón para ayudarlo a garantizar que el patrón coincida correctamente.

Usar (query-replace-regexp)( C-M-%) y crear una expresión regular para realizar el reemplazo que desea le ayudará a practicar.

Jonathan Leech-Pepin
fuente
¿Qué beneficio ofrece esto a alguien que quiere "practicar" expresiones regulares que regexp-builderaún no ofrece? El problema query-replace-regexpes que necesita escribir una expresión regular completa y luego comprometerse a averiguar qué coincide. Si no le gusta el resultado, debe comenzar de nuevo. regexp-buildermuestra coincidencias sobre la marcha, lo que facilita ajustar tu expresión regular hasta que funcione si no sabes lo que estás haciendo.
nispio
1
Admito que esa es la desventaja. Sin embargo, si estás familiarizado con el uso de expresiones regulares query-replace-regexp, te acostumbrarás a usarlo específicamente en Emacs
Jonathan Leech-Pepin
Quizás ... pero no parece coincidir con lo que pide el OP. "Si está familiarizado con las expresiones regulares", entonces realmente no necesita aprender expresiones regulares.
nispio
1
OP pregunta cómo aprender cómo / cuándo usarlos interactivamente como principiante de Emacs. Es posible que ya tengan algunos conocimientos de expresiones regulares de otros tipos de expresiones regulares.
Jonathan Leech-Pepin