2011-05-09 6 views
10

Estoy tratando de reemplazar todas las apariciones de una palabra completa en emacs (digamos foo) utilizando M-x replace-regexp.Límite de palabra Emacs regex (específicamente con guiones bajos)

El problema es que no quiero para reemplazar las apariciones de foo en las palabras subrayadas como word_foo_word

Si utilizo \ bfoo \ b para que coincida con foo entonces coincidirá con las cuerdas subrayados; porque según entiendo, emacs considera que los subrayados son parte de los límites de las palabras, lo que es diferente de otros sistemas regex como perl.

¿Cuál sería la forma correcta de proceder?

Gracias

Respuesta

5

Usted escribió:

como entiendo emacs considera guiones de ser parte de los límites de palabra, que es diferente a otros sistemas de expresiones regulares

el tratamiento de subrayados, como todo lo demás en emacs, es configurable. Esta pregunta:
How to make forward-word, backward-word, treat underscore as part of a word?

... pregunta el converse.

Creo que podría resolver su problema cambiando la sintaxis de guiones bajos en la tabla de sintaxis para que no sean parte de las palabras, y luego haciendo la búsqueda/reemplazo.

Para hacer eso, necesita saber el modo que está utilizando y el nombre de la tabla de sintaxis para ese modo. En C++, sería así:

(modify-syntax-entry ?_ "." c++-mode-syntax-table) 

El punto significa "puntuacion", lo que implica no forma parte de una palabra. Para obtener más información al respecto, intente M-x describe-function en modify-syntax-entry.

+0

Miró tablas de sintaxis gracias. – nsimplex

9

La expresión regular \<foo\> o \bfoo\b partidos foo sólo cuando no está precedido o seguido por un carácter constituyente palabra (syntax codew, por lo general alfanuméricos, de modo que coincida en foo_bar pero no en foo1).

Desde Emacs 22, la expresión regular \_<foo_bar\_> partidos foo_bar sólo cuando no está precedido o seguido de un carácter de símbolo constituyente. Un constituyente de símbolo es un constituyente de palabra o un carácter con la sintaxis _. La mayoría del modo de programación define _ como un componente de símbolo.

+0

Thanks \ _ nsimplex

Cuestiones relacionadas