termina regular palabras expressions expresion especiales espacios cualquier con caracteres caracter regex emacs replace boundary underscores

regular - Límite de palabra de Emacs regex(específicamente con respecto a los caracteres de subrayado)



regex termina con (2)

Estoy tratando de reemplazar todas las ocurrencias de una palabra completa en emacs (digamos foo) usando Mx replace-regexp.

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

Si utilizo / bfoo / b para hacer coincidir foo, coincidirá con las cadenas resaltadas; 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


El regexp /<foo/> o /bfoo/b coincide con foo solo cuando no está precedido o seguido por un carácter constituyente de palabra ( código de sintaxis w , generalmente alfanumérico, por lo que coincide en foo_bar pero no en foo1 ).

Desde Emacs 22, el regexp /_<foo_bar/_> coincide con foo_bar solo cuando no está precedido o seguido por un carácter constituyente de símbolo. Un constituyente de símbolo es una palabra constituyente o un carácter con sintaxis _ . La mayoría del modo de programación define _ para ser un constituyente de símbolo.


Tu escribiste:

como entiendo, emacs considera que los subrayados son parte de los límites de las palabras, lo cual es diferente de otros sistemas regex

El tratamiento de guiones bajos, como todo lo demás en emacs, es configurable. Esta pregunta:
¿Cómo hacer una palabra directa, una palabra hacia atrás, tratar un guión bajo como parte de una palabra?

... pregunta al converso.

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

Para hacer eso, necesita saber el modo que está usando 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 "puntuación", que no implica parte de una palabra . Para obtener más información al respecto, intente con Mx describe-function en modify-syntax-entry .