vacio tab regulares microsoft expresiones cuantificadores cuadro concatenar basicas regex emacs syntax advising-functions

regex - tab - ¿Es posible cambiar la sintaxis de expresiones regulares de emacs?



expresiones regulares vacio (2)

Podría definir su propia función elisp que modificó la expresión regular y luego la devolvió a emacs. En pseudo-elisp:

(defun my-query-replace-regexp (regexp) ; modify regexp to replace ( with /(, { with /{, etc. (query-replace-regexp modified-regexp) ) ; rebind C-% to use new regexp function (global-set-key "/C-%" ''my-query-replace-regexp)

Me encantan los emacs. Me encantan las expresiones regulares. Odio la sintaxis de expresiones regulares de emacs: la necesidad de evitar la agrupación de parens y corchetes, de que no se escapan los parens literales, la falta de clases de caracteres predefinidas, etc.

¿Puedo reemplazar el motor de expresiones regulares de emacs, o modificar algunas configuraciones, de modo que cuando use la función Query-replace-regexp (o una de muchas otras) pueda usar el programa de sintaxis I en java / js / perl / ruby ​​/ etc ...?

Edición: el tema originalmente era "cómo cambiar el motor de expresiones regulares de emacs", que no solo cambiaría las reglas de escape y agregaría clases de caracteres, sino que también (no se menciona en la publicación) agregará soporte para varias extensiones comunes (? ...). Características como los parens no capturadores: (?: ...), coinciden solo si / if-not seguido de: (? = ...) / (?! ...), y otros. No creo (aunque estoy feliz de ser corregido) que esto sea posible con el actual motor de expresiones regulares de emacs, y ninguna cantidad de reemplazos de sintaxis lo solucionará.

La solución a continuación aborda los problemas originales de las clases de caracteres de escape y adicionales mediante el reemplazo con la sintaxis que entiende emacs. Una segunda respuesta (ahora eliminada) sugirió aconsejar (agregar una función para que se ejecute al comienzo de otra) la función de expresiones regulares de emacs para reemplazar el procesamiento de todas las expresiones regulares. El autor rápidamente se censuró a sí mismo al darse cuenta de que probablemente rompería mucho el código de emacs existente y, finalmente, se eliminó la publicación.

Todavía me gustaría cambiar el motor de expresiones regulares a uno que admita extensiones, pero estoy de acuerdo en que cambiar el comportamiento de escape universalmente causaría estragos que no estoy dispuesto a perseguir. Por lo tanto, estoy cambiando el tema para que coincida con la pregunta y acepto la respuesta.

Se me ocurrió cambiar el motor para admitir la sintaxis común y las extensiones, recomendar a la función de expresiones regulares para convertir el código interno de emacs a sintaxis común, recomendar las funciones interactivas para convertir mi sintaxis común a la sintaxis de emacs (para que pueda ser convertido de nuevo a común) ... pero creo que incluso RMS recomendaría un fork antes de eso.


Si usar expresiones regulares de Python para búsqueda / reemplazo incrementales, y para reemplazar y reemplazar la consulta es suficiente, entonces visual-regexp-steroids es una buena opción.

visual-regexp-steroids es una extensión de visual-regexp que permite el uso de los motores modernos de expresión regular (¡no hay más paréntesis de grupo escapados, y otras golosinas!) ... Por ahora, Python y pcre2el son compatibles de fábrica (probados en Linux y Windows).

El valor predeterminado es expresiones regulares de Python .

Una característica realmente interesante es una búsqueda / reemplazo en vivo, por ejemplo, comenzando con

one = 1 two = 2 three = 3 four = 4

Puedes intercambiar los números y las cadenas de esta forma:

Se puede instalar fácilmente a través de MELPA . Mi .emacs es:

(require ''visual-regexp-steroids) (define-key global-map (kbd "C-c r") ''vr/isearch-backward) (define-key global-map (kbd "C-c s") ''vr/isearch-forward) (define-key global-map (kbd "C-c l") ''vr/replace) (define-key global-map (kbd "C-c q") ''vr/query-replace)

pero, obviamente, puede cambiar para adaptarse, y anular las asignaciones de teclas incorporadas para buscar y reemplazar si lo desea.