Necesito realizar una regex query replace, de modo que
foo
en foo bar
coincide, pero foo
en foo baz
no. Normalmente usaría regex mirar hacia adelante, por ejemplo foo(?=bar)
.
Sin embargo, ¿parece que Emacs no puede hacer esto? Vim parece capaz , pero el modo malvado en los spacemacs no puede.
regular-expressions
Heisenberg
fuente
fuente
Respuestas:
No, las expresiones regulares de Emacs no admiten aserciones arbitrarias de anticipación / retroceso de ancho cero.
nb Evil y Spacemacs (como todas las bibliotecas de elisp) son irrelevantes cuando se trata de preguntas sobre la implementación del lenguaje Emacs Lisp.
fuente
foo
enfoobar
pero no enfoobaz
? Esta es una operación bastante común que pensé que debía haber una solución. ¿Quizás mirar hacia adelante y hacia atrás es el enfoque equivocado?foo\(bar\)
conbaz\1
será suficiente en todos los casos en quebar
no contenía más partidos.foo
con\,(if (looking-at "bar") "baz" \&)
reemplazaráfoo
conbaz
si el siguiente texto esbar
(y reemplazarfoo
con lofoo
contrario). Que todavía no es lo mismo que solo coincidirfoo
cuando es seguidobar
, pero es otra opción.