2010-08-18 17 views
17

tengo un búfer de Emacs que contiene el textoemacs-constructor de expresiones regulares no funciona en replace-regexp

a1b2c3 

usando la expresión regular-constructor, i crear la expresión regular

"b\\(2\\)" 

y puede ver el resaltado del partido (b2, con el 2 en un color diferente).

Sin embargo, cuando pego la expresión en replace-regexp, obtengo 0 coincidencias. ambos con y sin las comillas. para obtener un partido i necesidad de utilizar

b\(2\) 

supongo que hay algún escape pasando aquí, pero seguro que debo estar haciendo algo mal. tener que escapar manualmente parece vencer la mitad del punto.

Respuesta

27

regexp-builder puede mostrar la expresión regular en varias sintaxis. De forma predeterminada, utiliza la sintaxis que es apropiada para poner en un origen de Emacs Lisp (sintaxis read), por lo que la expresión regular se coloca entre comillas dobles y cada barra invertida se duplica. Para uso interactivo, seleccione la sintaxis string con C-c C-i (reb-change-syntax).

+0

que está bien, muchas gracias por esta pista – Hartmut

+2

Estoy realmente confundido por esta respuesta; Considere esto: 'string [5string] ' ahora regexp-builder coincide con el" 5 "(" cualquier número precedido por un corchete angular de apertura ") con" \\ [[0-9] ". Ahora si 'M-x query-replace \\ [[0-9] RET plop' no obtengo nada. Intenté \\ [\ [0-9 \] (también funciona en el constructor), nada. No indicó dónde se supone que debo escribir 'C-c C-i ': en el generador de expresiones regulares, en el minibúfer mientras lo usa, en otro lugar? Resultó que estaba en el generador de expresiones regulares, pero luego me ofrece 4 opciones (leer, rx, sregex, cadena), ¿cuál debería elegir ** para que emacs entienda su propia sintaxis regexp? ** – yPhil

+0

Wow la sintaxis del comentario escapa los caracteres de escape, que harán que los comentarios sobre los caracteres de escape sean incómodos :) ¿En serio, incluso en los marcadores de "código", escapando? – yPhil

Cuestiones relacionadas