Saya perlu melakukan penggantian permintaan regex, sedemikian rupa
foo
di foo bar
dicocokkan, tetapi foo
di foo baz
tidak. Biasanya saya akan menggunakan regex melihat ke depan, mis foo(?=bar)
.
Namun, sepertinya Emacs tidak bisa melakukan ini? Vim tampaknya mampu , tetapi mode jahat di spacemac tidak bisa.
regular-expressions
Heisenberg
sumber
sumber
Jawaban:
Tidak, ekspresi reguler Emacs tidak mendukung pernyataan nol-lebar melihat-depan / belakang sewenang-wenang.
nb Evil dan Spacemacs (seperti semua pustaka elisp) tidak relevan ketika menyangkut pertanyaan tentang implementasi bahasa Emacs Lisp.
sumber
foo
difoobar
tetapi tidak dalamfoobaz
? Ini adalah operasi yang cukup umum yang saya pikir pasti ada solusinya. Mungkin melihat ke depan dan ke belakang adalah pendekatan yang salah?foo\(bar\)
denganbaz\1
akan cukup dalam semua kasus di manabar
tidak mengandung kecocokan lebih lanjut.foo
dengan\,(if (looking-at "bar") "baz" \&)
akan digantifoo
denganbaz
jika teks berikut inibar
(dan gantifoo
dengan yangfoo
lain). Yang masih tidak sama dengan hanya mencocokkanfoo
ketika diikuti olehbar
, tetapi itu pilihan lain.