J'ai besoin d'effectuer un remplacement de requête regex, de telle sorte que
foo
in foo bar
correspond, mais foo
in foo baz
ne l'est pas. Normalement, j'utiliserais l'expression régulière regex, par exemple foo(?=bar)
.
Cependant, il semble qu'Emacs ne puisse pas faire cela? Vim semble capable , mais le mode diabolique dans les spacemacs ne le peut pas.
regular-expressions
Heisenberg
la source
la source
Réponses:
Non, les expressions régulières Emacs ne prennent pas en charge les assertions arbitraires d'anticipation / de largeur nulle.
nb Evil et Spacemacs (comme toutes les bibliothèques elisp) ne sont pas pertinents lorsqu'il s'agit de questions sur l'implémentation du langage Emacs Lisp.
la source
foo
enfoobar
mais pas enfoobaz
? C'est une opération assez courante pour que je pense qu'il doit y avoir une solution. Peut-être que regarder en avant et en arrière est la mauvaise approche?foo\(bar\)
parbaz\1
suffira dans tous les cas oùbar
ne contient pas d'autres correspondances.foo
par\,(if (looking-at "bar") "baz" \&)
remplacerafoo
parbaz
si le texte suivant estbar
(et remplacezfoo
parfoo
sinon). Ce qui n'est toujours pas la même chose que d' apparier uniquementfoo
quand c'est suivibar
, mais c'est une autre option.