Di Vim Anda dapat menggunakan jangkar lebar nol \zsdan \zeuntuk menentukan awal dan akhir dari pola yang dicari, yang ingin Anda cocokkan. Apa pun sebelum \zsdan sesudah \zedalam pola Anda akan tetap tidak terpengaruh oleh penggantian.
Bisakah Anda memberikan uraian dasar tentang apa yang \zsada dalam jawaban Anda?
EvergreenTree
3
Itu perlu dicatat bahwa alasan ini bekerja adalah karena .*adalah serakah .
Wildcard
7
Anda dapat mencari kecocokan terakhir dengan mengelompokkan semua \(.*\),, tetapi kejadian terakhir dari pattern. Kemudian keluar dengan grup yang ditangkap \1,, dan menambahkan replacement.
(Ini lebih rendah daripada \zssolusi @ ryuichiro , dalam hal \1pendekatan Anda secara fungsional setara, tetapi lebih bertele-tele. (Di sisi lain, mungkin lebih mudah diingat untuk beberapa, terutama jika mereka digunakan untuk rasa regex lainnya.))
Aaron Thoma
0
Demi kelengkapan saya pikir saya akan memposting alternatif. Vim memiliki multi-item beberapa di antaranya mirip dengan pernyataan pencarian ekspresi reguler yang lebih standar (lookahead negatif / positif / lihat di belakang). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
Dalam hal ini kami menginginkan tampilan negatif \@!,, yang berarti kami ingin menegaskan bahwa atom yang mendahului item tidak terjadi setelah pola . Dalam hal ini atom adalah pola itu sendiri yang didahului oleh hal lain:
:%s/pattern\(.*pattern\)\@!/replacement/
Bagian di dalam tanda kurung adalah nol-lebar dan tidak termasuk dalam pertandingan sehingga tidak digantikan oleh substitusi.
:h \@!untuk informasi lebih lanjut atau :h pattern-multi-itemsuntuk seluruh bagian yang mengandung variasi lookaround lainnya.
\zs
ada dalam jawaban Anda?.*
adalah serakah .Anda dapat mencari kecocokan terakhir dengan mengelompokkan semua
\(.*\)
,, tetapi kejadian terakhir daripattern
. Kemudian keluar dengan grup yang ditangkap\1
,, dan menambahkanreplacement
.sumber
\zs
solusi @ ryuichiro , dalam hal\1
pendekatan Anda secara fungsional setara, tetapi lebih bertele-tele. (Di sisi lain, mungkin lebih mudah diingat untuk beberapa, terutama jika mereka digunakan untuk rasa regex lainnya.))Demi kelengkapan saya pikir saya akan memposting alternatif. Vim memiliki multi-item beberapa di antaranya mirip dengan pernyataan pencarian ekspresi reguler yang lebih standar (lookahead negatif / positif / lihat di belakang). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
Dalam hal ini kami menginginkan tampilan negatif
\@!
,, yang berarti kami ingin menegaskan bahwa atom yang mendahului item tidak terjadi setelah pola . Dalam hal ini atom adalah pola itu sendiri yang didahului oleh hal lain:Bagian di dalam tanda kurung adalah nol-lebar dan tidak termasuk dalam pertandingan sehingga tidak digantikan oleh substitusi.
:h \@!
untuk informasi lebih lanjut atau:h pattern-multi-items
untuk seluruh bagian yang mengandung variasi lookaround lainnya.sumber