Muszę wykonać zamianę wyrażenia regularnego, np
foo
w foo bar
dopasowane, ale foo
w foo baz
nie. Zwykle użyłbym wyrażenia regularnego, np foo(?=bar)
.
Wydaje się jednak, że Emacs nie może tego zrobić? Vim wydaje się zdolny , ale tryb zła w kosmicznych maczugach nie.
regular-expressions
Heisenberg
źródło
źródło
Odpowiedzi:
Nie, wyrażenia regularne Emacsa nie obsługują arbitralnych asercji przewidywania zerowej szerokości.
nb Złe i Spacemacs (jak wszystkie biblioteki elisp) nie mają znaczenia, jeśli chodzi o pytania dotyczące implementacji języka Emacs Lisp.
źródło
foo
sięfoobar
jednak niefoobaz
? Jest to dość powszechna operacja, która moim zdaniem musi być rozwiązaniem. Być może niewłaściwe podejście jest złe?foo\(bar\)
gobaz\1
będzie wystarczające we wszystkich przypadkach, w którychbar
nie zawierały dalszych dopasowań.foo
przez\,(if (looking-at "bar") "baz" \&)
spowoduje zastąpieniefoo
przez,baz
jeśli następujący tekst tobar
(i zastąpfoo
wfoo
innym przypadku). Co wciąż nie jest tym samym, co dopasowanie tylkofoo
wtedy, gdy następujebar
, ale jest to inna opcja.